Files
homework/mdrozdov/greenplum/dm_layer.sql
T

71 lines
2.0 KiB
SQL

--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