-- ### ✅ **Задание 2: Подготовь структуру витрины `lesson_popularity_summary`**
--
-- **Цель:** анализировать популярность каждого урока.
--
-- 📌 **Что нужно сделать:**
--
-- - Спроектируй таблицу, где каждая строка — один урок.
-- - Для каждого урока должны храниться:
--     - ID и название урока
--     - ID и название курса, к которому он относится
--     - Общее число просмотров
--     - Количество уникальных пользователей, посмотревших урок
--     - Дата первого и последнего просмотра
--
-- **Зачем это нужно:**
--
-- Эта витрина поможет выявлять наиболее популярные уроки и курсы, следить за актуальностью контента, понимать вовлечённость студентов по отдельным материалам.
SELECT l.lesson_id             AS lesson_id,
       l.title                 AS lesson_name,
       c.course_id             AS course_id,
       c.title                 AS course_name,
       countOrNull()           AS total_view,
       uniqOrNull(flv.user_id) AS unique_users,
       min(flv.viewed_at)      AS first_date,
       max(flv.viewed_at)      AS last_date
FROM pet_project.lessons l
         LEFT JOIN pet_project.courses c ON c.course_id = l.course_id
         LEFT JOIN pet_project.fact_lesson_views flv ON flv.lesson_id = l.lesson_id
GROUP BY l.lesson_id, l.title, c.course_id, c.title;

-- Создание мат view
CREATE MATERIALIZED VIEW pet_project.mv_lesson_popularity_summary
            ENGINE = SummingMergeTree()
                ORDER BY (lesson_id, course_id)
            POPULATE
AS
SELECT l.lesson_id        AS lesson_id,
       any(l.title)       AS lesson_name,
       c.course_id        AS course_id,
       any(c.title)       AS course_name,
       count()            AS total_views,
       uniq(flv.user_id)  AS unique_users,
       min(flv.viewed_at) AS first_date,
       max(flv.viewed_at) AS last_date
FROM pet_project.lessons l
         LEFT JOIN pet_project.courses c ON c.course_id = l.course_id
         LEFT JOIN pet_project.fact_lesson_views flv ON flv.lesson_id = l.lesson_id
GROUP BY l.lesson_id, c.course_id;

