查找不同的值,然后按mySQL分组并计数

时间:2018-09-01 20:05:02

标签: mysql group-by distinct

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

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

但是它不起作用。

1 个答案:

答案 0 :(得分: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)返回不同个值的数量