Найти отличительные значения и затем сгруппировать и считать в mySQL - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть таблица, в которой есть несколько повторяющихся значений на ту же дату

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 голосов
/ 01 сентября 2018

Использование 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) возвращает количество различных значений
...