diff --git a/amaksatov/postgresql/OS-330.sql b/amaksatov/postgresql/OS-330.sql index beeae0e..4745707 100644 --- a/amaksatov/postgresql/OS-330.sql +++ b/amaksatov/postgresql/OS-330.sql @@ -1,15 +1,16 @@ -CREATE MATERIALIZED VIEW user_activity_summary AS -SELECT - u.id AS user_id, - u.name, - COUNT(DISTINCT e.course_id) AS enrollment_count, - COUNT(DISTINCT lv.lesson_id) AS viewed_lessons_count, - MAX(lv.viewed_at) AS last_viewed, - MIN(lv.viewed_at) AS first_viewed, - ROUND (COUNT(DISTINCT lv.lesson_id) * 1.0 / NULLIF(COUNT(DISTINCT l.id), 0) * 100, 2) AS "engagement_rate(%)" -FROM amaksatov.users u -LEFT JOIN enrollments e ON e.user_id = u.id -LEFT JOIN lessons l ON l.course_id = e.course_id -LEFT JOIN lesson_views lv ON lv.lesson_id = l.id AND u.id = lv.user_id -GROUP BY u.id; +CREATE MATERIALIZED VIEW user_activity_summary AS +SELECT + u.id AS user_id, -- user_id + u.name, -- name + COUNT(DISTINCT e.course_id) AS enrollment_count, -- кол-во записей на курсы + COUNT(DISTINCT lv.lesson_id) AS viewed_lessons_count, -- кол-во просмотренных уроков + MAX(lv.viewed_at) AS last_viewed, -- последний просмотр + MIN(lv.viewed_at) AS first_viewed, -- первый просмотр + ROUND(COUNT(DISTINCT l.course_id) * 100.0 / COUNT(DISTINCT l.id), 2) || '%' AS engagement_rate -- вовлеченность(процент просмотренных/записанным) +FROM amaksatov.users u -- основная таблица +JOIN enrollments e ON e.user_id = u.id -- связь users с enrollments +LEFT JOIN lesson_views lv ON lv.user_id = e.user_id -- связь lessons с lesson_views +JOIN lessons l ON l.course_id = e.course_id -- связь уроков с курсами пользователя +GROUP BY u.id, u.name -- группировка по user_id и name +ORDER BY user_id; -- сортировка по user_id