【发布时间】:2020-09-01 06:53:01
【问题描述】:
我的数据如下所示,
我想总结 ALL 的出现次数。这应该按 Id 分组。所以输出应该是这样的,
ID Count
1 5
2 4
我的查询看起来像,
select id,
(count(Monday) + count(Tuesday) + count(Wednesday) + count(Thursday) +
count(Friday) + count(Saturday) + count(Sunday)) as 'Count'
from Report
where Monday = 'ALL'
or Tuesday = 'ALL'
or Wednesday = 'ALL'
or Thursday = 'ALL'
or Friday = 'ALL'
or Saturday = 'ALL'
or Sunday = 'ALL'
group by Id;
这个查询给我的结果是,
ID Count
1 5
2 6
这对于 ID 2 不正确。第二行的 Friday 值是一个空字符串。
【问题讨论】:
-
您是否有多个具有相同 ID 的行?
GROUP BY用于将具有相同值的多行组合在一列中。 -
count(case when Monday = 'ALL' then 1 end) -
这是因为您的
or条件。 -
认真考虑修改您的架构。数据库表不是电子表格。
-
COUNT(Friday)将计算任何非空值。空字符串不是NULL,所以会被计算在内。