Files
homework/APolikanov/2 - GreenPlum-Pet-project/7.3 DDL_CREATE_dm.course_completion_rate.SQL
T
2025-12-07 17:01:30 +04:00

39 lines
1.1 KiB
SQL

DROP MATERIALIZED VIEW IF EXISTS dm.course_completion_rate;
CREATE MATERIALIZED VIEW dm.course_completion_rate
DISTRIBUTED BY (user_id)
AS
with activity_users as (
select
e.user_id as user_id,
e.course_id as course_id,
COUNT(DISTINCT flv.viewed_at) as lessons_viewed
from
core.enrollments e
left join core.dim_lesson dl on e.course_id = dl.course_id
left join core.fact_lesson_views flv on e.user_id = flv.user_id and e.course_id = flv.course_id and dl.lesson_id = flv.lesson_id
group by
e.user_id,
e.course_id),
course2 as (
select
course_id,
COUNT(*) as lessons_in_course
from core.dim_lesson
group by
course_id)
select
au.user_id as user_id,
du.name as user_name,
au.course_id as course_id,
dc.title as course_title,
c2.lessons_in_course as lessons_in_course,
au.lessons_viewed as lessons_viewed,
ROUND(au.lessons_viewed * 1.0 / c2.lessons_in_course , 2) as completion_rate
from
activity_users au
left join core.dim_user du on au.user_id = du.user_id
left join core.dim_course dc on au.course_id = dc.course_id
left join course2 c2 on au.course_id = c2.course_id
order by
au.user_id,
au.course_id;