Files
homework/gmokrousov/postgresql/DM_user_activity_summary.sql

35 lines
1.1 KiB
SQL

-- Витрина активности пользователей
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 / nullif(en.possible_lessons, 0), 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;