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/