homework, pet project DE Dmitry_Medvedev #1

Open
dmitry_medvedev wants to merge 266 commits from md_branch into main
Showing only changes of commit f7e6b757df - Show all commits
@@ -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;