Added LEFT JOIN and NULLIF to Task 5
This commit is contained in:
@@ -324,7 +324,7 @@ from CTE
|
|||||||
|
|
||||||
------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------
|
||||||
-- 5 Задание Популярность курсов
|
-- 5 Задание Популярность курсов
|
||||||
create materialized view lesson_popularity_ranking AS
|
create materialized view lesson_popularity_ranking as
|
||||||
with lessons_in_courses as (
|
with lessons_in_courses as (
|
||||||
select l.id as lesson_id, l.title as lesson_title, c.title as course_title,
|
select l.id as lesson_id, l.title as lesson_title, c.title as course_title,
|
||||||
COUNT(e.user_id) as enrolled_users
|
COUNT(e.user_id) as enrolled_users
|
||||||
@@ -338,24 +338,22 @@ views_cte as (
|
|||||||
select lic.lesson_id,
|
select lic.lesson_id,
|
||||||
COUNT(lv.id) as total_views,
|
COUNT(lv.id) as total_views,
|
||||||
COUNT(distinct lv.user_id) as unique_viewers,
|
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
|
COUNT(lic.enrolled_users) as enrolled_to_course
|
||||||
from lessons_in_courses lic
|
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
|
group by lic.lesson_id
|
||||||
)
|
)
|
||||||
select lic.lesson_id, lic.lesson_title, lic.course_title,
|
select lic.lesson_id, lic.lesson_title, lic.course_title,
|
||||||
vc.total_views,
|
vc.total_views,
|
||||||
vc.unique_viewers,
|
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,
|
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
|
from lessons_in_courses lic
|
||||||
join views_cte vc on lic.lesson_id = vc.lesson_id
|
join views_cte vc on lic.lesson_id = vc.lesson_id
|
||||||
;
|
;
|
||||||
-- Единственный момент в том, что в итоговом MV нет уроков и курсов без просмотров,
|
|
||||||
--то есть тут только те уроки, у которых есть хотя бы 1 просмотр.
|
|
||||||
-- Я не смог разобраться с NULL после LEFT JOIN таблиц и выдывало ошибку деления на 0 при подсчете completion_rate
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user