From 47599c3420bc1e90222e99a2903b021fa607980b Mon Sep 17 00:00:00 2001 From: Azamat Date: Sat, 10 Jan 2026 21:24:36 +0600 Subject: [PATCH] Done --- amaksatov/postgresql/OS-330.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 amaksatov/postgresql/OS-330.sql diff --git a/amaksatov/postgresql/OS-330.sql b/amaksatov/postgresql/OS-330.sql new file mode 100644 index 0000000..86a034c --- /dev/null +++ b/amaksatov/postgresql/OS-330.sql @@ -0,0 +1,19 @@ +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 ( + CASE + WHEN COUNT(DISTINCT l.id) = 0 THEN NULL + ELSE COUNT(DISTINCT lv.lesson_id) * 1.0 / COUNT(DISTINCT l.id) * 100 + END, 2)::TEXT || '%' 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 +HAVING COUNT(e.id) > 0; \ No newline at end of file