PET-project 1st task completed

This commit is contained in:
Alex
2026-02-16 13:16:37 +03:00
parent 87ba57befe
commit 0c961319b9
+35
View File
@@ -200,3 +200,38 @@ VALUES
(56, 14, 7, '2023-01-11 10:00:00'),
(57, 14, 8, '2023-01-12 11:00:00'),
(58, 14, 9, '2023-01-10 08:00:00');
---------------------------------------------------------
-- 1 задание Активные пользователи
create materialized view user_activity_summary AS
with enroll_count as (
select u.id as user_id, u.name as user_name,
COUNT(e.course_id) as enrollment_count
from users u
join enrollments e on u.id = e.user_id
group by u.id, u.name
),
viewed_count as (
select ec.user_id, ec.user_name, enrollment_count,
COUNT(distinct lv.lesson_id) as viewed_lessons_count,
MIN(lv.viewed_at) as first_view,
MAX(lv.viewed_at) as last_view
from enroll_count ec
left join lesson_views lv on ec.user_id = lv.user_id
group by ec.user_id, ec.user_name, enrollment_count
),
possible_lessons as (
select u.id as user_id, COUNT(l.id) as poss_lessons
from users u
left join enrollments e on u.id = e.user_id
left join lessons l on e.course_id = l.course_id
group by u.id
)
select vc.user_id, user_name, enrollment_count, viewed_lessons_count, first_view, last_view,
ROUND(100.0 * viewed_lessons_count / pl.poss_lessons, 2) as engagement_rate
from viewed_count vc
left join possible_lessons pl on vc.user_id = pl.user_id
;