diff --git a/dmedvedev/11.1 Pet project Activity users.sql b/dmedvedev/11.1 Pet project Activity users.sql index 150c80d..cb731cd 100644 --- a/dmedvedev/11.1 Pet project Activity users.sql +++ b/dmedvedev/11.1 Pet project Activity users.sql @@ -1,6 +1,6 @@ --Активность пользователей -CREATE MATERIALIZED VIEW user_activity_summary AS +--CREATE MATERIALIZED VIEW user_activity_summary AS --CTE кол-во курсов на которые записан пользователь WITH enrollment_count AS ( @@ -42,6 +42,18 @@ first_view AS ( ORDER BY plv.viewed_at ) AS first_view FROM pet_lesson_views plv +), + +--CTE кол-во курсов доступных пользователю +lesson_user_all_open AS ( + SELECT + pe.user_id, + pe.course_id, + COUNT(*) AS lesson_user_all_open + FROM pet_enrollments pe + LEFT JOIN pet_lessons pl ON pl.course_id = pe.course_id + GROUP BY pe.user_id, pe.course_id + ORDER BY user_id, course_id ) SELECT @@ -51,13 +63,20 @@ SELECT MAX(vlc.viewed_lessons_count) AS viewed_lessons_count, last_view, first_view, - ROUND(MAX(vlc.viewed_lessons_count * 100.0 / (SELECT COUNT(*) FROM pet_lessons pl)), 2) || '%' AS engagement_rate + ROUND(MAX(vlc.viewed_lessons_count) * 100.0 / lesson_user_all.lesson_user_all_open2, 2) || '%' AS engagement_rate FROM pet_users pu LEFT JOIN enrollment_count ec ON pu.id = ec.user_id LEFT JOIN viewed_lessons_count vlc ON pu.id = vlc.user_id LEFT JOIN last_view lv ON pu.id = lv.user_id LEFT JOIN first_view fv ON pu.id = fv.user_id +LEFT JOIN ( + SELECT + user_id, + SUM(luao.lesson_user_all_open) AS lesson_user_all_open2 + FROM lesson_user_all_open luao + GROUP BY user_id +) AS lesson_user_all ON lesson_user_all.user_id = pu.id -GROUP BY pu.id, ec.enrollment_count, last_view, first_view +GROUP BY pu.id, ec.enrollment_count, last_view, first_view, lesson_user_all.lesson_user_all_open2 ORDER BY pu.id; \ No newline at end of file