Pet 6th task completed

This commit is contained in:
Alex
2026-02-23 15:02:11 +03:00
parent a109cadca2
commit 4d56aa1f5b
+94 -1
View File
@@ -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-е задание сделал с помощью нейросети, потому что сам вообще никак к нему подобраться не мог.