I have a table USERS
and a table ORDERS
. In my backend office I'm attempting to output a table with all users (customers) and SUM
their individual order total, so to simplify I'm saying:
SELECT users.id, SUM(orders.total) as spent FROM users
JOIN orders ON users.id=orders.customer_id GROUP BY users.id
(Note: do not pay attention to the syntax, this is just to illustrate the point. the syntax is fine when I run it.)
I now have say 4 users in total and the ORDERS
table looks something like this:
order_id customer_id total
1 1 25
2 2 10
3 1 5
Then my query will output ONLY those users that can be found in the ORDERS
table and my backend customer overview table will look unfortunately like this:
Customer ID Spent in Total
1 30
2 10
ignoring completely the other 2 users who have not yet placed any orders. What I want to see is this:
Customer ID Spent in Total
1 30
2 10
3 0
4 0
Is there a way to do this?
My guess is that it has something to do with special joins like inner, outer, but I don't know the difference there.
Also what I thought about was to run two queries, selecting *
from users and then running a foreach
to sum up order total, but this seems inefficient.