39 lines
1.1 KiB
SQL
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; |