MySQL统计至多1个家属的员工家属数问题求助
解决方案
可以通过以下几种方式处理DEPENDENT_ID=0的特殊情况,得到符合预期的统计结果:
方法1:使用NULLIF过滤无效值
利用COUNT()函数不会统计NULL值的特性,用NULLIF()把DEPENDENT_ID=0的记录转为NULL,统计时自动忽略这些无效记录:
SELECT EMPID, COUNT(NULLIF(DEPENDENT_ID, 0)) AS dependent_count FROM DEPENDENT GROUP BY EMPID HAVING dependent_count <= 1;
NULLIF(DEPENDENT_ID, 0)的作用是:当DEPENDENT_ID等于0时返回NULL,否则返回原数值,COUNT()会跳过NULL,只统计有效的家属记录。
方法2:用CASE语句自定义统计逻辑
通过CASE语句明确标记有效/无效家属记录,再用SUM()统计有效数量:
SELECT EMPID, SUM(CASE WHEN DEPENDENT_ID > 0 THEN 1 ELSE 0 END) AS dependent_count FROM DEPENDENT GROUP BY EMPID HAVING dependent_count <= 1;
这里把DEPENDENT_ID>0的记录算作1个家属,DEPENDENT_ID=0的算作0,最终求和得到真实的家属总数。
方法3:包含无家属记录的员工(可选)
如果需要统计所有员工(包括没有任何家属记录的),可以和员工表做左连接,并用COALESCE()确保无家属的员工统计结果为0:
SELECT e.EMPID, COALESCE(COUNT(NULLIF(d.DEPENDENT_ID, 0)), 0) AS dependent_count FROM EMPLOYEE e LEFT JOIN DEPENDENT d ON e.EMPID = d.EMPID GROUP BY e.EMPID HAVING dependent_count <= 1;
内容的提问来源于stack exchange,提问作者mage18eight
相关产品推荐
相关产品推荐

