Собесов

StrataScratch (Netflix) — binge watching: ≥ 3 эпизода за сутки

SQLПоведенческие сегментыСредняяMiddle

Условие

Таблица netflix_views(user_id, view_date, episode_id, show_id). Найдите пользователей, которые за один календарный день посмотрели 3 и более эпизодов одного шоу (минимум один такой день).

Выход: user_id, show_id, view_date, episodes_watched.

Решение

SELECT
  user_id,
  show_id,
  view_date,
  COUNT(DISTINCT episode_id) AS episodes_watched
FROM netflix_views
GROUP BY user_id, show_id, view_date
HAVING COUNT(DISTINCT episode_id) >= 3
ORDER BY user_id, view_date;

Тонкости

  • COUNT(DISTINCT episode_id) — если пользователь пересмотрел один и тот же эпизод 5 раз, это всё ещё один эпизод. Без DISTINCT задвоим.
  • Группировка по (user_id, show_id, view_date) — потому что binge — это для конкретного шоу.

Если просят «binge events» в неделю

SELECT user_id, show_id, DATE_TRUNC('week', view_date) AS week, ...
HAVING COUNT(DISTINCT episode_id) >= 5  -- например

Та же логика, другая агрегация по времени.

Подводные камни

  1. «За один день» = view_date (DATE) или DATE_TRUNC('day', view_timestamp). Если view_date уже DATE — норм. Если TIMESTAMP — обязательно DATE_TRUNC или CAST AS DATE.
  2. Один эпизод смотрел 3 раза. С DISTINCT — это 1 эпизод, не binge. Без DISTINCT — задвоим.
  3. Часовой пояс. Если граница суток между 23:00 и 02:00 — пользователь может вылететь из «суток» в свою «ночь просмотра». Решается DATE_TRUNC в локальной tz.

Эталонный ответ

GROUP BY (user_id, show_id, view_date) HAVING COUNT(DISTINCT episode_id) >= 3. Просто, но с DISTINCT.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти