【问题标题】:Count of values grouped by a row id按行 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,所以会被计算在内。

标签: mysql sql group-by


【解决方案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 小提琴输入有什么不对。我想要的是清楚地在问题中解释。
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 2017-02-23
  • 2023-02-07
  • 2019-10-27
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
相关资源
最近更新 更多