Соедините события просмотра с devices, отфильтруйте тип smart_tv и сгруппируйте по user_id и movie_id. SUM(duration_sec) даст суммарные секунды просмотра для каждой пары.
Суммарное время просмотра фильмов с устройств smart_tv
Соедините события просмотра с devices, отфильтруйте тип smart_tv и сгруппируйте по user_id и movie_id. SUM(duration_sec) даст суммарные секунды просмотра для каждой пары.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеются две таблицы: watch_events и devices. В таблице watch_events фиксируются события просмотра пользователями и содержат следующие поля: • user_id — идентификатор пользователя; • movie_id — идентификатор фильма; • duration_sec — количество секунд, проведённых за просмотром; • dev_id — идентификатор устройства, с которого был произведён просмотр. Таблица devices хранит сведения о типах устройств. Составьте SQL‑запрос, который для каждого пользователя подсчитает суммарное время (в секундах) просмотра каждого фильма, если просмотр происходил с устройств типа smart_tv.
Ответ
Соедините события просмотра с devices, отфильтруйте тип smart_tv и сгруппируйте по user_id и movie_id. SUM(duration_sec) даст суммарные секунды просмотра для каждой пары.
Предположим, идентификатор устройства хранится в devices.id, а тип — в devices.type:
SELECT w.user_id, w.movie_id, SUM(w.duration_sec) AS total_seconds
FROM watch_events AS w
JOIN devices AS d ON d.id = w.dev_id
WHERE d.type = 'smart_tv'
GROUP BY w.user_id, w.movie_id;
Имена столбцов devices нужно сверить с реальной схемой. Её id должен быть уникальным, иначе соединение умножит события. Запрос считает сумму зарегистрированных длительностей, а не уникальное время фильма и не устраняет повторные события автоматически.