diff --git a/aharlamcev/postgresql/Pet-projectsql.sql b/aharlamcev/postgresql/Pet-projectsql.sql index 8b1d51f..d9b0c35 100644 --- a/aharlamcev/postgresql/Pet-projectsql.sql +++ b/aharlamcev/postgresql/Pet-projectsql.sql @@ -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 +; +