SQL统计项目关联人数异常:LEFT JOIN后count(*)返回非期望1值的排查
解决左连接后无关联项目计数为0的问题
嘿,我一眼就发现问题所在了!咱们来一步步搞定这个统计需求:
问题根源
你用left join关联两张表时,会保留first1里的所有项目记录——哪怕某个项目在diff里没有对应的人员分配。但你用的count(*)会统计每一行,包括那些右表字段全为NULL的行,所以无人员的项目被算成了1,而不是你想要的0。
解决方案
把count(*)替换成count(diff.p_id)(或者右表的任意字段,比如diff.name、diff.b都可以)。因为count(列名)会自动忽略该列值为NULL的行,这样就能准确统计出每个项目的实际分配人数了。
修正后的完整查询语句:
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
补充小知识
为什么选diff.p_id?其实右表的任何字段都可以——因为当左连接没有匹配到人员时,右表的所有字段都会是NULL,count函数遇到NULL就会跳过这条记录的统计,所以最终无人员的项目计数就是0,有人员的项目则会正确累加关联的数量。
内容的提问来源于stack exchange,提问作者prakash pappu
相关产品推荐
相关产品推荐

