我有一个user_groups
表,一个users
表和一个orders
表。
它们之间的关系是:users.group_id
,orders.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
实际输出:
订单数量应为5,而不是71:
答案 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
的作用。