/* - ВИТРИНА ДЛЯ АНАЛИЗА КОНВЕРСИИ ПРОХОЖДЕНИЯ КУРСА ПОЛЬЗОВАТЕЛЯМИ - CORE.DIM_USER И CORE.FACT_LESSON_VIEWS DISTRIBUTED BY (user_id) - ИТОГОВОЕ РАСПРЕДЕЛЕНИЕ ПО (user_id, course_id) */ CREATE MATERIALIZED VIEW IF NOT EXISTS dm.course_completion_rate AS WITH t1 AS ( SELECT e.user_id, du.name AS user_name, e.course_id, dc.title AS course_title, COUNT(DISTINCT dl.lesson_id) AS lessons_in_course FROM core.enrollments e JOIN core.dim_user du USING (user_id) JOIN core.dim_course dc USING (course_id) LEFT JOIN core.dim_lesson dl USING (course_id) GROUP BY user_id, du.name, course_id, dc.title ), t2 AS ( SELECT user_id, course_id, COUNT(DISTINCT lesson_id) AS lessons_viewed FROM core.fact_lesson_views GROUP BY user_id, course_id ) SELECT t1.user_id, t1.user_name, t1.course_id, t1.course_title, t1.lessons_in_course, COALESCE(t2.lessons_viewed, 0) AS lessons_viewed, COALESCE(ROUND(lessons_viewed::DECIMAL / NULLIF(lessons_in_course, 0), 2), 0) AS completion_rate FROM t1 LEFT JOIN t2 USING (user_id, course_id) DISTRIBUTED BY (user_id, course_id);