我有2个简单的表,如客户和订单,客户可以有0到n个订单。我希望有一个列表,如: 10个客户订购了0个订单 4位客户订购了1份 5位客户发了2个订单 2位客户发了3个订单 ... 等等。到目前为止,我有:
SELECT customers.id FROM customers
LEFT JOIN orders ON orders.customerId = customers.id
HAVING COUNT(orders.id) = 1;
列出了我订购1个订单的所有客户,但正如我所说,我需要一个包含所有拥有权的清单。
答案 0 :(得分:1)
SELECT COUNT(*), t.orderCount
FROM
(
SELECT u.id, COUNT(o.id) AS orderCount
FROM users u LEFT JOIN orders o
ON u.id = o.userId
GROUP BY u.id
) t
GROUP BY t.orderCount
内部查询将为每个用户及其订单总数:
user total
1 2
2 3
3 2
4 3
外部查询执行GROUP BY
此总计来计算共享总数的客户数量:
# customers total
2 2
2 3
答案 1 :(得分:0)
您可以使用聚合函数和组bu
SELECT ifnull(count(orders.id),0), users.id FROM users
LEFT JOIN orders ON orders.userId = users.id
group by users.id