2016-01-22 127 views
0

我有2个简单的表格,如客户和订单,客户可以有0到n个订单。我想有一个像这样的列表: 10个客户提出了0个订单 4个客户提出了1个订单 5个客户提出了2个订单 2个客户提出了3个订单 ...等等。到目前为止,我有:mysql:列出所有客户订单的数量

SELECT customers.id FROM customers 
LEFT JOIN orders ON orders.customerId = customers.id 
HAVING COUNT(orders.id) = 1; 

其中列出所有客户谁做了1订单,但正如我所说我需要一个列表与所有财产。

+0

'用户'是什么? – Strawberry

+0

对不起:用户是客户。 – Werner

+0

请编辑你的问题 – Strawberry

回答

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 
0

可以使用聚合函数和组卜

SELECT ifnull(count(orders.id),0), users.id FROM users 
LEFT JOIN orders ON orders.userId = users.id 
group by users.id 
相关问题