SQL统计问题:各项目分配人员数量查询结果与预期不符
解决无人员分配项目计数错误的问题
我明白你现在碰到的困扰:用LEFT JOIN搭配COUNT(*)统计项目已分配人数时,明明没有人员的项目却被错误计为1,和预期的0不符。这其实是COUNT(*)的特性导致的,我来给你拆解原因和解决方案。
问题根源
当你使用LEFT JOIN时,即便右表(diff)没有匹配到左表(first1)的行,左表的记录依然会被保留,此时右表对应的所有列值都是NULL。而COUNT(*)是统计所有行数,包括这些带NULL的行,所以无人员的项目就被误算成了1。
解决方案
把COUNT(*)替换成COUNT(diff.p_id)(或者diff.b、diff.name这类右表的列也可以)。因为COUNT(列名)会自动忽略NULL值,当没有匹配的人员时,diff.p_id是NULL,不会被计入统计,这样就能得到正确的0。
修改后的查询语句:
select first1.projectname, count(diff.p_id) as assigned_count from first1 left join diff on first1.a = diff.p_id group by first1.projectname;
验证结果
执行这条语句后,输出会和你的预期完全一致:
abc|0
crm|1
iic|2
sifty bank|0
另外,你也可以用COUNT(diff.b)或者COUNT(diff.name),效果是一样的,只要是右表中的列就行——因为它们在无匹配时都会是NULL,不会被COUNT统计进去。
内容的提问来源于stack exchange,提问作者prakash pappu
相关产品推荐
相关产品推荐

