Task Livecoding SQL Top 3 Visitors by Visit Count

23. Топ-3 посетителя по числу визитов #

Условие задачи:
📌 Есть таблица visits(visit_id, visitor_name, timestamp).
Необходимо вывести имена трёх посетителей, у которых наибольшее количество записей в таблице (визитов).

Спойлеры к решению
Подсказки
💡 Используйте GROUP BY visitor_name для подсчёта визитов по каждому человеку.
💡 Отсортируйте результат по убыванию количества визитов (COUNT(*) DESC).
💡 Примените LIMIT 3 для выборки трех записей.
💡 Альтернативно можно воспользоваться оконной функцией ROW_NUMBER() или RANK().
Решение
-- Решение 1: GROUP BY + ORDER BY + LIMIT
SELECT
  visitor_name,
  COUNT(*) AS visit_count
FROM visits
GROUP BY visitor_name
ORDER BY visit_count DESC
LIMIT 3;
-- Решение 2: Оконная функция ROW_NUMBER()
SELECT visitor_name, visit_count
FROM (
  SELECT
    visitor_name,
    COUNT(*) OVER (PARTITION BY visitor_name) AS visit_count,
    ROW_NUMBER() OVER (
      PARTITION BY visitor_name
      ORDER BY COUNT(*) OVER (PARTITION BY visitor_name) DESC
    ) AS rn
  FROM visits
) t
WHERE rn = 1
GROUP BY visitor_name, visit_count
ORDER BY visit_count DESC
LIMIT 3;