mysql:列出所有客户的订单数量

时间:2016-01-22 08:21:19

标签: mysql

我有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个订单的所有客户,但正如我所说,我需要一个包含所有拥有权的清单。

2 个答案:

答案 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