Выберите наиболее повторяющиеся значения и отсортируйте их в MySQL

#mysql

#mysql

Вопрос:

допустим, у меня есть эта таблица

 no | date       | no1   | no2    | no3   |
------------------------------------------
01 | 1993-05-01 | 0019  | 1124   | 0592  | 
02 | 1993-05-02 | 1234  | 4221   | 5543  | 
03 | 1993-05-03 | 4321  | 0019   | 0019  | 
04 | 1993-05-04 | 0019  | 1112   | 6876  | 
  

Какой запрос MySQL вернет наиболее повторяющееся число и отсортирует их по последней дате?

Комментарии:

1. наиболее повторяющееся число в каком столбце (столбцах)?

2. привет, Шредер, мне нужно самое повторяющееся число во всех столбцах. Tq

3. Томалак Герет’кал, из таблицы мы знаем, что 0019 является наиболее повторяющимся числом. как рассчитывать на несколько столбцов?

4. Все еще теперь ясно. Вы ищете наибольшее количество повторений для конкретной даты по no1 / no2 / no3? И если да, то что вы хотите, если есть более одного числа, которые имеют наибольшее количество? Например, 1993-05-01 (все три встречаются один раз) 1993-05-02 (все три встречаются один раз) 1993-05-03 0019 встречается дважды 1993-05-04 (все три встречаются один раз)?

5. @bug11 Я просто хочу подсчитать, сколько появляется 0019, а затем отсортировать их по последней дате. Поможет ли union all?

Ответ №1:

Сначала вам нужно будет «сгладить» набор данных. Вы можете сделать это, выполнив 1 запрос для каждого столбца, затем выполнив ОБЪЕДИНЕНИЕ и ВЫБОР объединений с помощью group by.

 SELECT date, no, SUM(c) c FROM (
SELECT max(date) date, no1 AS no, count(no1) c FROM table GROUP BY no
UNION
SELECT max(date) date, no2 AS no, count(no1) c FROM table GROUP BY no
UNION
SELECT max(date) date, no3 AS no, count(no1) c FROM table GROUP BY no
) grouped_data GROUP BY no ORDER BY c DESC
  

Комментарии:

1. Спасибо. Он работает отлично, только сортировка по дате без указания последней даты. Спасибо