SQL如何按ID统计多个指定列中零值的总出现次数
实现ID分组统计多列零值总次数的SQL方案
需求为按ID统计每行hour1、hour2、hour3三个字段中值为0的总出现次数,提供两种通用实现方案:
方案1:全数据库兼容的条件求和写法
该写法不需要行转列逻辑,兼容MySQL、PostgreSQL、SQL Server、Oracle等所有主流数据库:
SELECT ID, SUM( CASE WHEN hour1 = 0 THEN 1 ELSE 0 END + CASE WHEN hour2 = 0 THEN 1 ELSE 0 END + CASE WHEN hour3 = 0 THEN 1 ELSE 0 END ) AS ZERO_HOURS FROM 你的表名 GROUP BY ID;
如果使用支持IF函数的数据库(如MySQL),可以简化为更短的写法:
SELECT ID, SUM(IF(hour1=0,1,0) + IF(hour2=0,1,0) + IF(hour3=0,1,0)) AS ZERO_HOURS FROM 你的表名 GROUP BY ID;
方案2:行转列写法(原思路修正版)
适配支持VALUES行构造语法的数据库,修复原有写法的CASE判断缺失、表关联逻辑缺失问题后的代码如下:
SELECT t.ID, COUNT(CASE WHEN v.v = 0 THEN 1 END) AS ZERO_HOURS FROM 你的表名 t CROSS JOIN LATERAL (VALUES (hour1), (hour2), (hour3)) AS v(v) GROUP BY t.ID;
两种方案运行后均可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者feswrytgu
相关产品推荐
相关产品推荐

