I have two tables:
customers | ||
---|---|---|
id | name | order_id |
orders | |||
---|---|---|---|
id | customer_id | date | amount |
I would like to get the first order for each customer so I used inner join
& min
on date. however, I’d like to get all order columns as well.
My SQL query is
SELECT
customers.id, customers.name,
MIN(orders.date)
FROM
customers
INNER JOIN
orders ON customers.id = orders.customer_id
GROUP BY
customers.id;
When I try to add more columns from orders table as following:
SELECT
customers.id, customers.name,
MIN(orders.date), orders.id, orders.amount
FROM
customers
INNER JOIN
orders ON customers.id = orders.customer_id
GROUP BY
customers.id;
I get an error
ERROR: column "orders.id" must appear in the GROUP BY clause or be used in an aggregate function
3
Answers
I think this will help you.
In SQL Group by clause, you can only select grouped column and aggregated columns. For your case, you have to add extra join to take whole data from order table using customer_id and minimun order_date
Use distinct on w/o
group by
. You may see this SO discussion for details.Then don’t use min at the main clause.
min(orders.date)
means that you want to get the minimum date for one column.You can filter order first before joining