【问题标题】:Find Distinct Values & then Group by and count in mySQL查找不同的值,然后在 mySQL 中分组并计数
【发布时间】:2018-09-01 20:05:02
【问题描述】:

我有一个表,其中有一些相同日期的重复值

MyTime   |  Mrc  |  Num
21-Dec   |  ABC  |  200
21-Dec   |  ABC  |  200
20-Dec   |  DEF  |  300
20-Dec   |  DEF  |  300
19-Dec   |  XYZ  |  254
21-Nov   |  ABC  |  200

我想忽略重复的条目并按 DATE(Mytime), Mrc, Num 分组,即我想检测一个月中同一天的条目,Mrc & Num 出现多次但不完全重复

所以预期的输出是:

MyTime |  Mrc  |  Num  | cnt
21     |  ABC  |  200  |  2

我尝试了以下几行:

SELECT DISTINCT(MyTime, Mrc, Num, Count(*) as cnt)
FROM  `My_Table`
WHERE MType != 'XX'
AND HType != 'YY'
GROUP BY Date(MyTime), Mrc, Num
ORDER BY MyTime DESC

但它不起作用。

【问题讨论】:

  • 所以,如果我理解你的话,你只想获得相同日期的记录数?
  • 如果其他列有日期相同但值不同的记录怎么办?
  • 是的,具有相同日期(不是月份)、相同 Mrc 和相同 Num 的记录计数,但忽略那些完全重复的条目。高于预期的结果是 21(因为相同的 Mrc (ABC) 和相同的 Num(200) 出现两次 - 12 月和 11 月)
  • 你的主键是什么?
  • @Strawberry 主键是一个“ID”列(上面未显示)

标签: mysql group-by distinct


【解决方案1】:

使用COUNT(DISTINCT MyTime):

SELECT
    DAY(MyTime) as MyTime
    Mrc,
    Num,
    COUNT(DISTINCT MyTime) as cnt
FROM  `My_Table`
WHERE MType != 'XX'
AND HType != 'YY'
GROUP BY 1, 2, 3
ORDER BY 1 DESC

注意事项:

  • 您希望 DAY() 函数而不是 DATE() 函数来提取日期的日部分
  • DISTINCT 是一个关键字,而不是一个函数,所以避免使用方括号,即像这样使用它:SELECT DISTINCT column1, column2, ...
  • COUNT(DISTINCT expression) 返回不同值的数量

【讨论】:

  • 谢谢,它按预期工作。顺便说一句,我可能会选择完整的 Mytime,但在进行 Group By 时只使用 DAY
  • 你到底是什么意思?给定样本数据,您想要的输出是什么?
  • 我知道这没有任何意义,因为返回的月份会模棱两可,但我希望它会返回最近发生的月份。 Mytime 的预期输出是 12 月 21 日,而不仅仅是 21
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 2020-11-20
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
相关资源
最近更新 更多