Added LEFT JOIN and NULLIF to Task 5

This commit is contained in:
Alex
2026-02-23 13:22:24 +03:00
parent 1f66082271
commit a109cadca2
+6 -8
View File
@@ -324,7 +324,7 @@ from CTE
------------------------------------------------------------------------------------------------------------------
-- 5 Задание Популярность курсов
create materialized view lesson_popularity_ranking AS
create materialized view lesson_popularity_ranking as
with lessons_in_courses as (
select l.id as lesson_id, l.title as lesson_title, c.title as course_title,
COUNT(e.user_id) as enrolled_users
@@ -338,24 +338,22 @@ views_cte as (
select lic.lesson_id,
COUNT(lv.id) as total_views,
COUNT(distinct lv.user_id) as unique_viewers,
1.00 * COUNT(lv.id) / COUNT(distinct lv.user_id) as avg_views_per_user,
1.00 * COUNT(lv.id) / nullif(COUNT(distinct lv.user_id), 0) as avg_views_per_user,
COUNT(lic.enrolled_users) as enrolled_to_course
from lessons_in_courses lic
join lesson_views lv on lic.lesson_id = lv.lesson_id
left join lesson_views lv on lic.lesson_id = lv.lesson_id
group by lic.lesson_id
)
select lic.lesson_id, lic.lesson_title, lic.course_title,
vc.total_views,
vc.unique_viewers,
vc.avg_views_per_user,
coalesce(vc.avg_views_per_user, 0),
dense_rank() OVER (ORDER BY vc.total_views desc) as popularity_rank,
ROUND(100.0 * unique_viewers / enrolled_to_course, 2) as completion_rate 
ROUND(100.0 * unique_viewers / enrolled_to_course, 2) as completion_rate
from lessons_in_courses lic
join views_cte vc on lic.lesson_id = vc.lesson_id
;
-- Единственный момент в том, что в итоговом MV нет уроков и курсов без просмотров,
--то есть тут только те уроки, у которых есть хотя бы 1 просмотр.
-- Я не смог разобраться с NULL после LEFT JOIN таблиц и выдывало ошибку деления на 0 при подсчете completion_rate