[英]MySQL: COUNT() from multiple tables
我有3个表的user
, person
和company
。
user_id
是person
和company
表中的foreign key
。
我想要做的是计算与每个用户相关的人数和公司,因此我进行了以下查询:
select u.id , u.username, count(c.user_id) as count_company, count(p.user_id) as count_people
from user u left join company c on (u.id = c.user_id)
left join person p on (u.id = p.user_id)
group by u.id, u.username
但是,当我尝试使用此查询仅计算与每个用户相关的公司时:
select u.id , u.username, count(c.staff_user_id) as count_company
from fos_user u left join company c on (u.id = c.staff_user_id)
group by u.id, u.username
如果用户与多个公司和/或多个人相关,那么您始终要计算它们的交叉联接 -然后,将公司的数量乘以人数。
为了解决这个问题(在您的情况下),我将使用子查询:
select u.id, u.username,
(select count(*) from company c where u.id = c.user_id) as count_company,
(select count(*) from person p where u.id = p.user_id) as count_people
from user u
请注意,从关系的角度来看(在大多数情况下),类似于查询中的双重联接是错误的。
似乎您需要独特的数量
select u.id
, u.username
, count(distinct c.user_id) as count_company
, count(distinct p.user_id) as count_people
from user u
left join company c on (u.id = c.user_id)
left join person p on (u.id = p.user_id)
group by u.id, u.username
count(col)计算col中的非空值... count(distinct col)计算col1的不同值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.