我有一张表USERS
和一张表ORDERS
。在我的后端办公室,我正在尝试输出一个包含所有用户(客户)和SUM
个人订单总数的表格,所以为了简化我的说法:
SELECT users.id, SUM(orders.total) as spent FROM users
JOIN orders ON users.id=orders.customer_id GROUP BY users.id
(注意:不要注意语法,这只是为了说明一点。运行时语法很好。)
我现在总共说了4个用户,ORDERS
表看起来像这样:
order_id customer_id total
1 1 25
2 2 10
3 1 5
然后我的查询将仅输出ORDERS
表中可以找到的那些用户,我的后端客户概览表看起来很遗憾:
Customer ID Spent in Total
1 30
2 10
完全忽略尚未下订单的其他2位用户。我想看到的是:
Customer ID Spent in Total
1 30
2 10
3 0
4 0
有办法做到这一点吗?
我的猜测是它与内部,外部等特殊连接有关,但我不知道它们之间的区别。
我还想到的是运行两个查询,从用户中选择*
,然后运行foreach
来总结订单总数,但这似乎效率低下。
答案 0 :(得分:4)
因为有时候一张图片的价值超过千字:
答案 1 :(得分:1)
你需要一个左连接,并且在一些(旧)版本的MySQL上也需要一个IFNULL()
。
SELECT
users.id,
IFNULL(SUM(orders.total),0) as spent
FROM users
LEFT JOIN orders ON users.id=orders.customer_id
GROUP BY users.id
答案 2 :(得分:0)
select u.id, sum(o.Total)
from Users u
left outer join Orders o on u.id = o.customer_id
group by u.id