繁体   English   中英

MySQL:来自多个表的COUNT()

[英]MySQL: COUNT() from multiple tables

我有3个表的userpersoncompany
user_idpersoncompany表中的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM