витрина 'Популярность курсов' для 'Пет-проект: Онлайн-курсы'
This commit is contained in:
+39
@@ -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;
|
||||||
Reference in New Issue
Block a user