2017-06-15 78 views
1

所以我有两个表:返回次数的ID重复

订单

order_id | user_id 
    1  |  1 
    2  |  1 
    3  |  1 
    4  |  2 
    5  |  2 

用户

user_id | name 
    1 | John 
    2 | Mike 

我要回的ID,客户的名称,以及如何他放置了很多命令。类似这样的:

user_id | name | num_orders 
    1 | John | 3 
    2 | Mike | 2 

我试着做下面的查询,但它只返回第一个用户的名字和订单总量。这是我的查询:

SELECT 
    users.user_id, 
    users.name, 
    COUNT(orders.order_id) AS num_orders 

FROM users 

LEFT JOIN orders 
ON users.user_id = orders.user_id 

ORDER BY users.user_id DESC 

任何帮助,非常感谢! :)

回答

3

您缺少GROUP BY语句。如果你在最后加入

GROUP BY users.user_id 

它应该纠正你的问题。

有关SQL语句的更多帮助,尝试http://www.dofactory.com/sql/tutorial

+0

谢谢,我不能相信我没想到这越快。 –

2

你所寻找的是一个GROUP BY条款。 它与聚合函数(COUNT,MAX,MIN,SUM,AVG)一起使用,将结果按一列或多列分组。下面是它的工作原理。

SELECT 
    users.name, 
    users.user_id, 
    count(users.user_id) as total 
FROM users 
LEFT JOIN orders ON users.user_id = orders.user_id 
GROUP BY users.user_id 
ORDER BY users.user_id DESC 

而且结果:

username |user_id | total 
John  | 3 | 3 
Mary  | 2 | 5 
Carl  | 1 | 1 
... 
+0

谢谢,我不敢相信我没有早点想到这一点。 –