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
|
||||
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