在mysql中查找不同的值,然后分组并计数

rn0zuynd  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(342)

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

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 i、 e.我想检测具有同一个月的同一天、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

但它不起作用。

myzjeezk

myzjeezk1#

使用 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) 返回不同值的数目

相关问题