витрина 'Когортный анализ пользователей' для 'Пет-проект: Онлайн-курсы'

This commit is contained in:
mnoskov
2026-03-21 19:49:00 +03:00
parent c5381da248
commit 3e09a2cbc7
@@ -0,0 +1,40 @@
CREATE MATERIALIZED VIEW user_cohort_analysis AS
WITH users_and_enrollments_results AS (
SELECT
date_trunc('month', u.registration_date)::date AS cohort_month,
count(DISTINCT u.id) AS users_in_cohort,
count(DISTINCT e.user_id) AS enrolled_users,
count(DISTINCT e.course_id) courses_in_cohort
FROM
users u
JOIN
enrollments e ON u.id = e.user_id
GROUP BY
cohort_month
),
lesson_views_results AS (
SELECT
date_trunc('month', u.registration_date)::date AS cohort_month,
count(DISTINCT lv.user_id) AS active_users,
round(avg(lv.viewed_at::date - u.registration_date::date), 0) AS avg_time_to_first_view
FROM
users u
LEFT JOIN
lesson_views lv ON u.id = lv.user_id
GROUP BY
cohort_month
)
SELECT
uer.cohort_month,
uer.users_in_cohort,
uer.enrolled_users,
lvr.active_users,
round((lvr.active_users / uer.users_in_cohort::numeric) * 100, 2) || '%' AS retention_rate,
round(uer.courses_in_cohort / uer.users_in_cohort::numeric, 2) AS avg_courses_per_user,
lvr.avg_time_to_first_view
FROM
users_and_enrollments_results uer
JOIN
lesson_views_results lvr ON uer.cohort_month = lvr.cohort_month
ORDER BY
uer.cohort_month;