SQL查询行返回null时如何统计为0:按工作状态统计工单数量
问题原因
你当前使用的SQL语句先通过WHERE子句过滤出所有STATUS = 'awarded'的记录后再分组统计,没有对应状态的Workid会被直接排除在结果集外,自然无法展示计数为0的结果。
解决方案
方案1:条件聚合(最常用,无需额外关联表)
将状态过滤逻辑从WHERE子句移到聚合函数内部,保留所有Workid的分组,符合条件的计数,不符合的返回0:
SELECT Workid, COUNT(CASE WHEN STATUS = 'awarded' THEN 1 END) AS awarded_count FROM WORK GROUP BY Workid
逻辑说明:COUNT函数仅统计非NULL值,不符合STATUS = 'awarded'的记录会返回NULL被COUNT忽略,最终无匹配行的Workid计数就会为0。你也可以用SUM写法实现相同效果:SUM(CASE WHEN STATUS = 'awarded' THEN 1 ELSE 0 END) AS awarded_count
方案2:关联Workid主表(适用于需要统计的Workid可能完全没有出现在WORK表的场景)
如果有单独存储所有有效Workid的主表,可通过左连接实现全量Workid的统计:
SELECT master.Workid, COUNT(CASE WHEN w.STATUS = 'awarded' THEN 1 END) AS awarded_count FROM Workid_Master master LEFT JOIN WORK w ON master.Workid = w.Workid GROUP BY master.Workid
内容的提问来源于stack exchange,提问作者Micky
相关产品推荐
相关产品推荐

