sql - 多列中零值的 SQL COUNT
问题描述
我正在计算基于 ID 的一系列列中出现了多少个零。
示例表:
ID hour1 hour2 hour3
1 2 10 0
2 0 0 0
3 0 24 0
我认为它看起来像这样,但显然它不起作用
SELECT ID, COUNT(CASE WHEN(
FROM (VALUES (hour1) , (hour2) , (hour3))
AS VALUE (v)) AS ZERO_HOURS
期望的输出:
ID ZERO_HOURS
1 1
2 3
3 2
解决方案
一种方法是:
select t.id, h.num_zeros
from t cross apply
(select count(*) as num_zeros
from (values (hour1), (hour2), (hour3)) v(h)
where h = 0
) h;
当然,case
表达式也不是那么难:
select t.id,
(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 num_zeros
或者,如果没有负值或NULL
值:
select t.id,
(1 - sign(hour1)) + (1 - sign(hour2)) + (1 - sign(hour3)) as num_zeros
推荐阅读
- python - 将重组与日期时间字段一起使用
- powershell - 在 powershell 中检查启用/禁用的 PNP 设备
- plasticscm - 尝试推送更改时,出现错误“找不到指定的更改集 6”。这是什么意思以及如何解决?
- python - 在for循环python中切片字符串列表
- swift - 搜索功能在透明的 UITableView 中实现,但它不起作用。任何帮助表示赞赏
- c# - 使用集合的属性与表达式树中的其余属性进行比较
- php - 在产品页面中添加到购物车表单后显示预计发货日期
- php - 使用 php for-loop 将动态创建的输入字段中的数据插入数据库
- java - 使用递归在网格上回溯
- c++ - 从 QNetworkReply 读取后,Qt5 没有波兰字符