From 811294366357e2498bef28854360244c33afb2a9 Mon Sep 17 00:00:00 2001 From: George Date: Thu, 11 Dec 2025 18:25:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=80=D0=B8=D0=BD=D1=83=20=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D1=8E=D0=B7=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postgresql/DM_user_activity_summary.sql | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 gmokrousov/postgresql/DM_user_activity_summary.sql diff --git a/gmokrousov/postgresql/DM_user_activity_summary.sql b/gmokrousov/postgresql/DM_user_activity_summary.sql new file mode 100644 index 0000000..3fb3d94 --- /dev/null +++ b/gmokrousov/postgresql/DM_user_activity_summary.sql @@ -0,0 +1,35 @@ +-- Витрина активности пользователей +CREATE MATERIALIZED VIEW user_activity_summary as + with + lessons_cte as ( + select + user_id, + count (*) as viewed_lessons_count, + max(viewed_at) as last_view, + min(viewed_at) as first_view + from lesson_views + group by user_id + ), + enrollments_cte as ( + select user_id, count(*) as enrollment_count + from enrollments as e + group by user_id + ), + engagement_cte as ( + select user_id, count(*) as possible_lessons + from lessons as l + join enrollments as en on l.course_id = en.course_id + group by user_id + ) + select + id as user_id, + name, + e.enrollment_count, + l.viewed_lessons_count, + l.last_view, + l.first_view, + round(l.viewed_lessons_count::decimal * 100 / en.possible_lessons, 2) as engagement_rate + from users as u + join lessons_cte as l on u.id = l.user_id + join engagement_cte as en on u.id = en.user_id + join enrollments_cte as e on u.id = e.user_id; \ No newline at end of file