gpt4 book ai didi

MySQL:来自多个表的 COUNT()

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:49 25 4
gpt4 key购买 nike

我有 3 个表 userpersoncompany
user_idpersoncompany 表中的外键
我想做的是计算每个用户有多少人和公司相关,所以我做了以下查询:

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

但我得到了错误的结果!!
这是我得到的结果:
enter image description here

但是,当我尝试仅计算与使用此查询的每个用户相关的公司时:

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

我得到这个结果:
enter image description here
我在这里错过了什么?

最佳答案

如果用户与多家公司和/或多人相关,那么您总是计算他们的交叉连接 - 即公司数量乘以人员数量。cross join p>

为了解决这个问题(在你的情况下)我会使用子查询:

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

请注意,从关系的角度(在大多数情况下)来看,查询中的双连接是错误的。

关于MySQL:来自多个表的 COUNT(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54463982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com