29. Найти самое часто встречающееся значение
Условие задачи:
Есть таблица с колонками key и value:
key | value
----|------
1 | sdfs
2 | dsfg
3 | sdfs
Необходимо найти значение value, которое встречается чаще всего.
Если несколько значений имеют одинаковую максимальную частоту, вывести их все.
Спойлеры к решению
Подсказки
💡 Сначала сгруппируй строки по
💡 Затем нужно определить значения с максимальным количеством повторений.
💡 Если возможны одинаковые максимальные значения, простой
value и посчитай количество вхождений через COUNT(*).💡 Затем нужно определить значения с максимальным количеством повторений.
💡 Если возможны одинаковые максимальные значения, простой
LIMIT 1 вернёт только одно из них.Решение
Вариант с оконной функцией:
SELECT value
FROM (
SELECT
value,
RANK() OVER (
ORDER BY COUNT(*) DESC
) AS rnk
FROM your_table
GROUP BY value
) t
WHERE rnk = 1;
Сначала:
GROUP BY value
группирует одинаковые значения, а COUNT(*) определяет количество их вхождений.
RANK() присваивает ранг в порядке убывания количества повторений. Значения с максимальной частотой получают ранг 1.
Для приведённых данных результат:
sdfs
Если по условию достаточно вернуть только одно самое частое значение, можно использовать более простой запрос:
SELECT value
FROM your_table
GROUP BY value
ORDER BY COUNT(*) DESC
LIMIT 1;
Но при одинаковой максимальной частоте такой вариант вернёт только одно из подходящих значений.