Пет проект: DWH. Этап 4: Подготовка витрин в Greenplum.
This commit is contained in:
@@ -0,0 +1,90 @@
|
|||||||
|
-- 7
|
||||||
|
--DROP MATERIALIZED VIEW dm.lesson_popularity_summary;
|
||||||
|
CREATE MATERIALIZED VIEW dm.lesson_popularity_summary AS
|
||||||
|
WITH results_fact_lesson_views AS (
|
||||||
|
SELECT
|
||||||
|
flv.lesson_id,
|
||||||
|
count(flv.user_id) AS total_views,
|
||||||
|
count(DISTINCT flv.user_id) AS unique_users,
|
||||||
|
min(flv.viewed_at)::date AS first_view,
|
||||||
|
max(flv.viewed_at)::date AS last_view
|
||||||
|
FROM
|
||||||
|
core.fact_lesson_views flv
|
||||||
|
GROUP BY
|
||||||
|
flv.lesson_id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
dl.lesson_id,
|
||||||
|
dl.title AS lesson_title,
|
||||||
|
dl.course_id,
|
||||||
|
dc.title AS course_title,
|
||||||
|
rflv.total_views,
|
||||||
|
rflv.unique_users,
|
||||||
|
rflv.first_view,
|
||||||
|
rflv.last_view
|
||||||
|
FROM
|
||||||
|
core.dim_lesson dl
|
||||||
|
JOIN
|
||||||
|
core.dim_course dc ON dl.course_id = dc.course_id
|
||||||
|
LEFT JOIN
|
||||||
|
results_fact_lesson_views rflv ON dl.lesson_id = rflv.lesson_id;
|
||||||
|
|
||||||
|
|
||||||
|
-- 8
|
||||||
|
--DROP MATERIALIZED VIEW dm.inactive_users_summary;
|
||||||
|
CREATE MATERIALIZED VIEW dm.inactive_users_summary AS
|
||||||
|
SELECT
|
||||||
|
du.user_id,
|
||||||
|
du.name AS user_name,
|
||||||
|
du.email,
|
||||||
|
du.age,
|
||||||
|
0 AS enrollments_count,
|
||||||
|
du.registration_date
|
||||||
|
FROM
|
||||||
|
core.dim_user du
|
||||||
|
WHERE
|
||||||
|
NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id);
|
||||||
|
-- тут странно, в условии сказано зачем-то enrollment присоединять, но делается все и без него отлично
|
||||||
|
|
||||||
|
|
||||||
|
-- 9
|
||||||
|
--DROP MATERIALIZED VIEW dm.course_completion_rate;
|
||||||
|
CREATE MATERIALIZED VIEW dm.course_completion_rate AS
|
||||||
|
WITH results_dim_course_lesson AS (
|
||||||
|
SELECT
|
||||||
|
dc.course_id,
|
||||||
|
dc.title,
|
||||||
|
count(lesson_id) AS lessons_in_course
|
||||||
|
FROM
|
||||||
|
core.dim_course dc
|
||||||
|
JOIN
|
||||||
|
core.dim_lesson dl ON dc.course_id = dl.course_id
|
||||||
|
GROUP BY
|
||||||
|
dc.course_id
|
||||||
|
),
|
||||||
|
results_fact_lesson_views AS (
|
||||||
|
SELECT
|
||||||
|
flv.user_id,
|
||||||
|
flv.course_id,
|
||||||
|
count(DISTINCT lesson_id) AS lessons_viewed
|
||||||
|
FROM
|
||||||
|
core.fact_lesson_views flv
|
||||||
|
GROUP BY
|
||||||
|
flv.user_id, flv.course_id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
du.user_id,
|
||||||
|
du.name AS user_name,
|
||||||
|
rdcl.course_id,
|
||||||
|
rdcl.title AS course_title,
|
||||||
|
rdcl.lessons_in_course,
|
||||||
|
COALESCE(rflv.lessons_viewed, 0) AS lessons_viewed,
|
||||||
|
round(COALESCE(rflv.lessons_viewed, 0) / NULLIF(rdcl.lessons_in_course, 0)::numeric, 2) AS completion_rate
|
||||||
|
FROM
|
||||||
|
core.dim_user du
|
||||||
|
JOIN
|
||||||
|
core.enrollments e ON du.user_id = e.user_id
|
||||||
|
JOIN
|
||||||
|
results_dim_course_lesson rdcl ON e.course_id = rdcl.course_id
|
||||||
|
LEFT JOIN
|
||||||
|
results_fact_lesson_views rflv ON e.user_id = rflv.user_id AND e.course_id = rflv.course_id;
|
||||||
Reference in New Issue
Block a user