Hey guys I’m having trouble solving an exercise of SQL: I can’t seem to understand how can I write a query that answers the question in the title based on a purchase database. I tried selecting distinct values per month, but the same customer can make a purchase in different months, so they would end up being duplicated.
SELECT EXTRACT(YEAR FROM o.order_date) AS year, EXTRACT(MONTH FROM o.order_date) AS month, COUNT(DISTINCT o.customerID) AS total_customers FROM `store1.Orders` AS o JOIN `store1.Customers` AS c ON o.customerID = c.customerID GROUP BY year, month ORDER BY month ASC
Columns of store1.Orders:
- orderID
- order_date
- purchase_status
- revenue
- customerID
Columns of store1.Customers:
- customerID
- Name
Could someone help me?
Advertisement
Answer
I’d approach the problem from user, not from order.
SELECT COUNT(*) as new_customers, EXTRACT(YEAR FROM custs.first_order_date) AS year, EXTRACT(MONTH FROM custs.first_order_date) AS month FROM (SELECT MIN(o.order_date) as first_order_date, o.customerID FROM store1.Orders o GROUP BY c.customer_ID) custs GROUP BY year, month ORDER BY month ASC
There may be typos or syntax errors in the query, I didn’t test it. But you’ll get approach.