通过其用户获取属于组的用户数和属于该组的订单数

时间:2018-11-21 16:38:08

标签: mysql sql

我有一个user_groups表,一个users表和一个orders表。

它们之间的关系是:users.group_idorders.user_id

我正在尝试获取属于每个组的用户数量,以及通过其用户属于每个组的订单数量。

我的代码:

select user_groups.*, count(users.id) as user_count, count(orders.id) as order_count

from user_groups

left join users on user_groups.id=users.group_id
left join orders on users.id=orders.user_id

group by user_groups.id

预期输出:

id | user_count | order_count
1  | 5          | 67
2  | 1          | 1

实际输出:

enter image description here

订单数量应为5,而不是71:

enter image description here

1 个答案:

答案 0 :(得分:2)

使用count(distinct)

select ug.*, count(distinct u.id) as user_count, count(distinct o.id) as order_count    
from user_groups ug left join
     users u
     on ug.id = u.group_id left join
     orders o
     on u.id = o.user_id
group by ug.id;

count(id)计算非NULL值的数量。您显然想计算不同值的数量,这就是distinct的作用。