Найти максимальное количество вхождений для данного дня недели - PullRequest
0 голосов
/ 18 октября 2018

У меня есть таблица, содержащая тестовые данные с двумя столбцами, с которыми я работаю: «дата» и «квадрант».Столбец квадранта - это перечисляемое значение с 4 возможными значениями (1,2,3 или 4).

Каждый день недели (с датой в 4 месяца) связан с перечислением.

Значения перечисления регулярно появляются несколько раз для любого дня.

Я пытаюсь определить наиболее распространенное вхождение значения перечисления квадранта для данного дня недели по всей таблице.

Например, в понедельник было 20 значений перечисления «1» и 19 значений «2».

Я хотел бы просто увидеть наиболее распространенное, которое в этом примере - «1».

Примерно так:

Monday.........1
Tuesday........3
Wednesday......4
Thursday.......1
Friday..........2

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

SELECT DAYNAME(Date) AS Weekday
     , COUNT(quadrant) AS 'Most Likey Damaged Quadrant' 
  FROM damage_tbl 
 WHERE quadrant IS NOT NULL 
 GROUP 
    BY quadrant 
 ORDER
    BY WEEKDAY

Вот ссылка на таблицу и все данные на rextester: https://rextester.com/UQDSB56921

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете проверить этот пост , чтобы увидеть различные способы достижения этого (получение argmax в MySQL)

Один из способов (упомянутых там в комментарии) - это Self-анти-соединение:

SELECT a.Weekday, a.quadrant FROM (
    SELECT DAYNAME(Date) AS Weekday, quadrant, COUNT(*) AS 'cnt' 
      FROM damage_tbl 
     WHERE quadrant IS NOT NULL 
     GROUP 
        BY WEEKDAY, quadrant
     ORDER
        BY WEEKDAY, count(*) desc ) a LEFT JOIN (
    SELECT DAYNAME(Date) AS Weekday, quadrant, COUNT(*) AS 'cnt' 
      FROM damage_tbl 
     WHERE quadrant IS NOT NULL 
     GROUP 
        BY WEEKDAY, quadrant
     ORDER
        BY WEEKDAY, count(*) desc ) b 
ON a.Weekday = b.Weekday and a.cnt < b.cnt  
WHERE b.Weekday is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...