我有这个SQL:
SELECT
c.id,
c.name,
SUM(CASE WHEN o.status = 1 THEN 1 ELSE 0 END)
FROM orders o, customers c
WHERE o.customer_id = c.id
GROUP BY c.id;
从表customer
中获取所有客户。
计算表status=1
中orders
分组的列customer_id
中有多少行。
如果客户在表sql
中至少有一个订单(任何状态,即使所有状态都与orders
相异,则我的1
都可以正常工作。
但是,如果表order
中有一个没有订单(不依赖状态)的客户,它将不会出现在结果中。
假设我们有这两个客户:
100 - C1 - 15 orders(7 have status 1)
101 - C2 - No orders
结果将是:
100 | C1 | 7
如何包含C2
?
100 | C1 | 7
101 | C2 | 0
Never在FROM
子句中使用逗号。 总是使用正确的,显式的标准 JOIN
语法。
而且,您想要LEFT JOIN
:
SELECT c.id, c.name,
COUNT(o.customer_id)
FROM customers c LEFT JOIN
orders o
ON o.customer_id = c.id AND o.status = 1
GROUP BY c.id;