PET 5th task completed
This commit is contained in:
@@ -322,5 +322,40 @@ avg_time_to_first_view
|
||||
from CTE
|
||||
;
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------
|
||||
-- 5 Задание Популярность курсов
|
||||
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
|
||||
from lessons l
|
||||
join courses c on l.course_id = c.id
|
||||
join enrollments e on e.course_id = c.id
|
||||
group by l.id, l.title, c.title
|
||||
order by lesson_id
|
||||
),
|
||||
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,
|
||||
COUNT(lic.enrolled_users) as enrolled_to_course
|
||||
from lessons_in_courses lic
|
||||
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,
|
||||
dense_rank() OVER (ORDER BY vc.total_views desc) as popularity_rank,
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user