SQL tricks
September 1, 2022
Как вывести наиболее повторяющееся значение в таблице при группировке?
Дано: Две таблицы: пользователи (users) и их увлечения (user_hobbies)
id age name 1 18 Иван 2 18 Михаил 3 20 Светлана 4 18 Елена
user_id hobby 1 футбол 2 футбол 3 чтение 4 путешествия
Вопрос: Как получить наиболее популярное хобби для каждого возраста?
-- подсчитаем популярность каждого хобби в зависимости от возраста select age, hobby, count(*) popularity from user_hobbies join users on user_hobbies.user_id = users.id group by age, hobby;
Результат: +=====+=============+============+ | age | hobby | popularity | +=====+=============+============+ | 18 | путешествия | 1 | +-----+-------------+------------+ | 18 | футбол | 2 | +-----+-------------+------------+ | 20 | чтение | 1 | +-----+-------------+------------+
-- из полученного запроса выберем самые популярные хобби для каждого возраста select distinct age, first_value(hobby) over (partition by age order by popularity desc) AS hobby from ( select age, hobby, count(*) popularity from user_hobbies join users on user_hobbies.user_id = users.id group by age, hobby ) hobbies;
Результат: +=====+========+ | age | hobby | +=====+========+ | 18 | футбол | +-----+--------+ | 20 | чтение | +-----+--------+
Воспользуйтесь ссылкой для тестирования:
https://sqlize.online/sql/mysql80/2cac27a36a34a12a5dc7c737fbe5209a/