按行 ID 分组的值的计数
Posted
技术标签:
【中文标题】按行 ID 分组的值的计数【英文标题】:Count of values grouped by a row id 【发布时间】: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 值是一个空字符串。
dbfiddle
【问题讨论】:
您是否有多个具有相同 ID 的行?GROUP BY
用于将具有相同值的多行组合在一列中。
count(case when Monday = 'ALL' then 1 end)
这是因为您的or
条件。
认真考虑修改您的架构。数据库表不是电子表格。
COUNT(Friday)
将计算任何非空值。空字符串不是NULL
,所以会被计算在内。
【参考方案1】:
您可以对一周中的所有天使用计数,大小写等于ALL
SELECT Id, COUNT(Monday='ALL') + COUNT(Tuesday='ALL') + COUNT(Wednesday='ALL')+
COUNT(Thursday='ALL') + COUNT(Friday='ALL') + COUNT(Saturday='ALL')+
COUNT(Sunday='ALL')
FROM `Report`
GROUP BY Id ;
Demo
【讨论】:
那行不通。它返回空值。你可以在那个 dbfiddle 链接上试试。 嗯,SUM聚合需要换成COUNT @Bisoux @Bisoux,你的小提琴输入也不对,总是在你的问题中解释你想要什么。 @Fahmi 小提琴输入有什么不对。我想要的是清楚地在问题中解释。以上是关于按行 ID 分组的值的计数的主要内容,如果未能解决你的问题,请参考以下文章