витрина 'Популярность курсов' для 'Пет-проект: Онлайн-курсы'
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