按行 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 分组的值的计数的主要内容,如果未能解决你的问题,请参考以下文章

将 3 列分组为 1 列并生成计数 SQL

MySQL - 按行列表中的某个值分组

Spark - 按键分组,然后按值计数

如何按列值的计数进行分组并对其进行排序?

如何在R中通过分组变量统计有值的列数?

XSL:根据属性计数和匹配创建组