From ba40e725ba875ab20d23da4a59096cd62ae3ed2c Mon Sep 17 00:00:00 2001 From: George Date: Thu, 11 Dec 2025 18:28:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=80=D0=B8=D0=BD=D1=83=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=BA=D1=83=D1=80=D1=81=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gmokrousov/postgresql/DM_course_summary.sql | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 gmokrousov/postgresql/DM_course_summary.sql diff --git a/gmokrousov/postgresql/DM_course_summary.sql b/gmokrousov/postgresql/DM_course_summary.sql new file mode 100644 index 0000000..e303798 --- /dev/null +++ b/gmokrousov/postgresql/DM_course_summary.sql @@ -0,0 +1,24 @@ +CREATE MATERIALIZED VIEW course_summary as + with + lw as ( + select + user_id, + lesson_id, + viewed_at + from lesson_views + ) + select + id as course_id, + title as course_title, + count(distinct e.user_id) as unique_users, + count(distinct l.lesson_id) as lessons_count, + count(distinct lw.viewed_at) as total_views, + round(count(distinct lw.viewed_at)::decimal / count(distinct e.user_id), 2) as avg_views_per_user, + min(lw.viewed_at) as first_viewed_at, + max(lw.viewed_at) as last_viewed_at + from + courses as c + join (select course_id, user_id from enrollments) as e on c.id = e.course_id + join (select id as lesson_id, course_id from lessons) as l on c.id = l.course_id + join lw on l.lesson_id = lw.lesson_id + group by id; \ No newline at end of file