You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL语句使统计结果为0的部门也显示(按部门统计is_female为True的教授数量)

这个问题很常见,核心原因是你现在用的是隐式内连接(通过逗号关联表+WHERE条件),这种连接只会返回两个表中完全匹配的记录——而department2没有符合is_female='True'的教授,所以直接被过滤掉了。要让所有部门都显示,哪怕数量为0,你需要改成左外连接,并调整统计逻辑,具体可以这么改:

写法一:左连接时直接过滤符合条件的教授

SELECT 
    d.name, 
    COUNT(CASE WHEN p.is_female = 'True' THEN 1 END) AS female_professor_count
FROM department AS d
LEFT JOIN professor AS p 
    ON d.id = p.department_id AND p.is_female = 'True'
GROUP BY d.id, d.name;

这里用LEFT JOIN确保所有部门都会被保留,哪怕没有匹配的教授。把p.is_female='True'放在ON子句里,而不是WHERE,这样不会过滤掉没有符合条件教授的部门。COUNT(CASE...)会只统计满足条件的记录,没有符合条件的情况就返回0。

写法二:先关联所有教授,再统计符合条件的数量

SELECT 
    d.name, 
    SUM(CASE WHEN p.is_female = 'True' THEN 1 ELSE 0 END) AS female_professor_count
FROM department AS d
LEFT JOIN professor AS p 
    ON d.id = p.department_id
GROUP BY d.id, d.name;

这种写法先把所有部门和对应的教授关联起来,再用CASE表达式判断每个教授是否符合条件,符合就加1,否则加0,最后用SUM汇总数量。对于没有符合条件教授的部门,SUM会返回0,正好符合需求。

另外要注意:原来的GROUP BY p.department_id不太严谨,因为当某个部门没有匹配的教授时,p.department_id会是NULL,改用d.id, d.name分组更可靠,因为部门的id和name是唯一且确定的。

内容的提问来源于stack exchange,提问作者Sanewa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:17:28