Pet 6th task completed
This commit is contained in:
@@ -353,7 +353,100 @@ 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
|
||||||
;
|
;
|
||||||
|
-----------------------------------------------------------------------------------------------
|
||||||
|
-- 6 Задания Воронка Конверсии
|
||||||
|
create materialized view conversion_funnel AS
|
||||||
|
with course_lessons as (
|
||||||
|
select c.id as course_id, c.title as course_title,
|
||||||
|
COUNT(l.id) as total_lessons
|
||||||
|
from courses c
|
||||||
|
join lessons l on l.course_id = c.id
|
||||||
|
group by c.id, c.title
|
||||||
|
),
|
||||||
|
registered_users as (
|
||||||
|
select COUNT(distinct id) as total_users
|
||||||
|
from users
|
||||||
|
),
|
||||||
|
enrolled_users as (
|
||||||
|
select e.course_id,
|
||||||
|
COUNT(distinct e.user_id) as enrolled_count
|
||||||
|
from enrollments e
|
||||||
|
group by e.course_id
|
||||||
|
),
|
||||||
|
started_users as (
|
||||||
|
select l.course_id,
|
||||||
|
COUNT(distinct lv.user_id) as started_count
|
||||||
|
from lessons l
|
||||||
|
join lesson_views lv on l.id = lv.lesson_id
|
||||||
|
group by l.course_id
|
||||||
|
),
|
||||||
|
user_progress as (
|
||||||
|
select l.course_id, lv.user_id,
|
||||||
|
COUNT(distinct lv.lesson_id) as viewed_lessons
|
||||||
|
from lesson_views lv
|
||||||
|
join lessons l on lv.lesson_id = l.id
|
||||||
|
group by l.course_id, lv.user_id
|
||||||
|
),
|
||||||
|
mid_progress_users as (
|
||||||
|
select up.course_id,
|
||||||
|
COUNT(distinct up.user_id) as mid_progress_count
|
||||||
|
from user_progress up
|
||||||
|
join course_lessons cl on up.course_id = cl.course_id
|
||||||
|
where up.viewed_lessons >= cl.total_lessons * 0.5
|
||||||
|
group by up.course_id
|
||||||
|
),
|
||||||
|
completed_users as (
|
||||||
|
select up.course_id,
|
||||||
|
COUNT(distinct up.user_id) as completed_count
|
||||||
|
from user_progress up
|
||||||
|
join course_lessons cl on up.course_id = cl.course_id
|
||||||
|
where up.viewed_lessons >= cl.total_lessons
|
||||||
|
group by up.course_id
|
||||||
|
),
|
||||||
|
funnel_stages as (
|
||||||
|
select cl.course_id, cl.course_title,
|
||||||
|
'registered' as stage_name,
|
||||||
|
ru.total_users as users_count,
|
||||||
|
1 as stage_order
|
||||||
|
from course_lessons cl
|
||||||
|
cross join registered_users ru
|
||||||
|
union all
|
||||||
|
select cl.course_id, cl.course_title,
|
||||||
|
'enrolled' as stage_name,
|
||||||
|
eu.enrolled_count as users_count,
|
||||||
|
2 as stage_order
|
||||||
|
from course_lessons cl
|
||||||
|
left join enrolled_users eu on cl.course_id = eu.course_id
|
||||||
|
union all
|
||||||
|
select cl.course_id, cl.course_title,
|
||||||
|
'started' as stage_name,
|
||||||
|
su.started_count as users_count,
|
||||||
|
3 as stage_order
|
||||||
|
from course_lessons cl
|
||||||
|
left join started_users su on cl.course_id = su.course_id
|
||||||
|
union all
|
||||||
|
select cl.course_id, cl.course_title,
|
||||||
|
'mid_progress' as stage_name,
|
||||||
|
coalesce(mpu.mid_progress_count, 0) as users_count,
|
||||||
|
4 as stage_order
|
||||||
|
from course_lessons cl
|
||||||
|
left join mid_progress_users mpu on cl.course_id = mpu.course_id
|
||||||
|
union all
|
||||||
|
select cl.course_id, cl.course_title,
|
||||||
|
'completed' as stage_name,
|
||||||
|
coalesce(cu.completed_count, 0) as users_count,
|
||||||
|
5 as stage_order
|
||||||
|
from course_lessons cl
|
||||||
|
left join completed_users cu on cl.course_id = cu.course_id
|
||||||
|
)
|
||||||
|
select course_id, course_title, stage_name, users_count,
|
||||||
|
ROUND(100.0 * users_count / NULLIF(LAG(users_count) over (partition by course_id order by stage_order), 0), 2)
|
||||||
|
as conversion_from_previous,
|
||||||
|
ROUND(100.0 * users_count / NULLIF(FIRST_VALUE(users_count) over (partition by course_id order by stage_order), 0), 2)
|
||||||
|
as conversion_from_start
|
||||||
|
from funnel_stages
|
||||||
|
;
|
||||||
|
-- Признаюсь 6-е задание сделал с помощью нейросети, потому что сам вообще никак к нему подобраться не мог.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user