From d7a1b1921308d06ef76e5e77b06243a87ee169ce Mon Sep 17 00:00:00 2001 From: SERGEY_KONEV Date: Fri, 19 Dec 2025 11:39:12 +0300 Subject: [PATCH] fix course_summary and user_activity files --- skonev/postgresql/dm_course_summary.sql | 12 ++++++++++-- skonev/postgresql/dm_user_activity_summary.sql | 6 +++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/skonev/postgresql/dm_course_summary.sql b/skonev/postgresql/dm_course_summary.sql index ea9e711..30ff521 100644 --- a/skonev/postgresql/dm_course_summary.sql +++ b/skonev/postgresql/dm_course_summary.sql @@ -13,25 +13,33 @@ GROUP BY c.id, c.title courses_views AS ( SELECT l.course_id, - COUNT(DISTINCT l.id) AS lessons_count, COUNT(lv.id) AS total_views, MAX(lv.viewed_at) AS last_viewed_at, MIN(lv.viewed_at) AS first_viewed_at FROM lessons l JOIN lesson_views lv ON l.id = lv.lesson_id GROUP BY l.course_id +), +courses_lessons AS ( + SELECT + course_id, + COUNT(DISTINCT id) AS lessons_count + FROM lessons + GROUP BY course_id ) + SELECT cu.course_id, cu.course_name, cu.unique_users, - cv.lessons_count, + cl.lessons_count, cv.total_views, ROUND(cv.total_views::DECIMAL / NULLIF(cu.unique_users, 0), 2) AS avg_views_per_user, cv.first_viewed_at, cv.last_viewed_at FROM courses_users cu LEFT JOIN courses_views cv USING(course_id) +LEFT JOIN courses_lessons cl USING(course_id) ORDER BY cu.course_id; COMMIT; diff --git a/skonev/postgresql/dm_user_activity_summary.sql b/skonev/postgresql/dm_user_activity_summary.sql index af431bc..048c8b3 100644 --- a/skonev/postgresql/dm_user_activity_summary.sql +++ b/skonev/postgresql/dm_user_activity_summary.sql @@ -5,7 +5,7 @@ WITH users_views AS ( SELECT u.id AS user_id, u.name, - COUNT(DISTINCT lv.lesson_id) AS viewed_lessons_COUNT, + COUNT(DISTINCT lv.lesson_id) AS viewed_lessons_count, MAX(lv.viewed_at) AS last_view, MIN(lv.viewed_at) AS first_view FROM users AS u @@ -16,7 +16,7 @@ GROUP BY u.id users_engagement AS ( SELECT e.user_id AS user_id, - COUNT(l.id) AS lessons_cnt, + COUNT(DISTINCT l.id) AS lessons_cnt, COUNT(DISTINCT course_id) AS enrollment_count FROM enrollments AS e JOIN lessons AS l using(course_id) @@ -28,7 +28,7 @@ SELECT uv.name, ue.enrollment_count, uv.viewed_lessons_count, - uv.lASt_view, + uv.last_view, uv.first_view, ROUND(uv.viewed_lessons_count::DECIMAL / NULLIF(ue.lessons_cnt, 0) * 100, 2) AS engagement_rate FROM users_views AS uv