diff --git a/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql b/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql index e03b401..a804a5c 100644 --- a/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql +++ b/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql @@ -157,6 +157,7 @@ SELECT FROM generate_series('2023-01-01'::date, '2030-12-31'::date, INTERVAL '1 day') AS d; +-- fact_lesson_views INSERT INTO core.fact_lesson_views (user_id, lesson_id, course_id, viewed_at) SELECT raw_lv.user_id, @@ -172,6 +173,7 @@ WHERE AND raw_lv.user_id IS NOT NULL AND raw_lv.lesson_id IS NOT NULL AND raw_l.course_id IS NOT NULL AND raw_lv.viewed_at IS NOT NULL; +-- enrollments INSERT INTO core.enrollments (user_id, course_id, enrolled_at) SELECT raw_e.user_id, diff --git a/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql b/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql index de2dac6..be37917 100644 --- a/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql +++ b/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql @@ -38,13 +38,22 @@ SELECT du.name AS user_name, du.email, du.age, - 0 AS enrollments_count, + e.enrollments_count, du.registration_date FROM core.dim_user du +LEFT JOIN ( + SELECT + user_id, + count(course_id) AS enrollments_count + FROM + core.enrollments + GROUP BY + user_id +) e ON du.user_id = e.user_id WHERE NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id); --- тут странно, в условии сказано зачем-то enrollment присоединять, но делается все и без него отлично +-- интересно, что при проверки плана запроса, когда кусок с enrollments_count был в CTE, выдавал какую-то хуйню, а когда я засунул его в подзапрос, сразу инлексы заработали, и строки начали эффективней читаться -- 9 @@ -60,7 +69,7 @@ WITH results_dim_course_lesson AS ( JOIN core.dim_lesson dl ON dc.course_id = dl.course_id GROUP BY - dc.course_id + dc.course_id, dc.title ), results_fact_lesson_views AS ( SELECT @@ -79,7 +88,7 @@ SELECT 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 + round(COALESCE(rflv.lessons_viewed, 0)::numeric / NULLIF(rdcl.lessons_in_course, 0), 2) AS completion_rate FROM core.dim_user du JOIN