--lesson_popularity_summary data mart create materialized view dm.lesson_popularity_summary as select dl.lesson_id, dl.title as lesson_title, dl.course_id, dc.title as course_title, count(flv.lesson_id) as total_views, count(distinct flv.user_id) as unique_users, min(flv.viewed_at) as first_view, max(flv.viewed_at) as last_view from core.dim_lesson dl left join core.dim_course dc on dl.course_id = dc.course_id left join core.fact_lesson_views flv on dl.lesson_id = flv.lesson_id group by dl.lesson_id, dl.title, dl.course_id, dc.title -- inactive_users_summary data mart create materialized view dm.inactive_users_summary as select du.user_id, du.name as user_name, du.email, du.age, count(e.course_id) as enrollments_count, du.registration_date from core.dim_user du left join core.enrollments e on du.user_id = e.user_id left join core.fact_lesson_views flv on du.user_id = flv.user_id where flv.user_id is null group by du.user_id, du.name, du.email, du.age, du.registration_date -- course_completion_rate data mart create materialized view dm.course_completion_rate as with total_lessons_per_course as( select course_id, count(*) as lessons_in_course from core.dim_lesson group by course_id ), lessons_viewed as ( select user_id, course_id, count(*) as lessons_viewed from fact_lesson_views flv group by user_id, course_id ) select du.user_id as user_id, du.name as user_name, dc.course_id as course_id, dc.title as course_title, tlpc.lessons_in_course, coalesce(lv.lessons_viewed, 0) as lessons_viewed, round( coalesce( coalesce(lv.lessons_viewed, 0)*1.0/nullif(tlpc.lessons_in_course, 0), 0 ), 2) as completion_rate from core.enrollments e join core.dim_user du on e.user_id = du.user_id join total_lessons_per_course tlpc on tlpc.course_id = e.course_id join core.dim_course dc on e.course_id = dc.course_id left join lessons_viewed lv on du.user_id = lv.user_id and dc.course_id = lv.course_id