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

This commit is contained in:
mnoskov
2026-03-21 20:49:34 +03:00
parent 3e09a2cbc7
commit f7e6b757df
@@ -0,0 +1,39 @@
CREATE MATERIALIZED VIEW lesson_popularity_ranking as
WITH lesson_views_results AS (
SELECT
lv.lesson_id,
count(lv.user_id) AS total_views,
count(DISTINCT lv.user_id) AS unique_viewers
FROM
lesson_views lv
GROUP BY
lv.lesson_id
),
enrollments_results AS (
SELECT
e.course_id,
count(e.user_id) AS enrolled_to_course
FROM
enrollments e
GROUP BY
e.course_id
)
SELECT
l.id AS lesson_id,
l.title AS lesson_title,
c.title AS course_title,
lvr.total_views,
lvr.unique_viewers,
round(lvr.total_views / lvr.unique_viewers::numeric, 2) AS avg_views_per_viewer,
dense_rank() OVER (ORDER BY lvr.total_views desc) AS popularity_rank,
round((lvr.unique_viewers / er.enrolled_to_course::numeric) * 100, 0) || '%' AS completion_rate
FROM
lessons l
JOIN
courses c ON l.course_id = c.id
JOIN
lesson_views_results lvr ON l.id = lvr.lesson_id
JOIN
enrollments_results er ON c.id = er.course_id
ORDER BY
popularity_rank;