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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:42:09