Исправил недочёты после код-ревью.

This commit is contained in:
Anton
2025-12-07 16:28:38 +04:00
parent 04fe13e9d9
commit cd513f80f7
5 changed files with 9 additions and 17 deletions
@@ -20,9 +20,7 @@ inner join edu_platform.lesson_views lv on u.id = lv.user_id
left join edu_platform.lessons l on lv.lesson_id = l.id left join edu_platform.lessons l on lv.lesson_id = l.id
left join edu_platform.lessons l2 on e.course_id = l2.course_id left join edu_platform.lessons l2 on e.course_id = l2.course_id
group by group by
u.id, u.name u.id, u.name;
ORDER by
u.id;
-- После анализа EXPLAIN -- После анализа EXPLAIN
-- Убрал диблирование строк, возникающее при Join-ах. -- Убрал диблирование строк, возникающее при Join-ах.
@@ -41,7 +39,7 @@ users_enroll as (
select select
u.id as user_id , u.id as user_id ,
u.name as name, u.name as name,
COUNT(e.course_id) as enrollment_count, COUNT(DISTINCT e.course_id) as enrollment_count,
SUM(cl.lesson_count) as lesson_sum SUM(cl.lesson_count) as lesson_sum
from from
edu_platform.users u edu_platform.users u
@@ -57,7 +55,6 @@ users_lesson_views as (
MIN(lv.viewed_at) as first_view MIN(lv.viewed_at) as first_view
from from
edu_platform.lesson_views lv edu_platform.lesson_views lv
left join edu_platform.lessons l on lv.lesson_id = l.id
group by lv.user_id group by lv.user_id
) )
select select
@@ -67,12 +64,10 @@ select
ulv.viewed_lessons_count, ulv.viewed_lessons_count,
ulv.last_view, ulv.last_view,
ulv.first_view, ulv.first_view,
ROUND( (ulv.viewed_lessons_count * 100.0) / nullif(lesson_sum, 0), ROUND( (nullif(ulv.viewed_lessons_count, 0) * 100.0) / ue.lesson_sum,
2) as engagement_rate 2) as engagement_rate
from users_enroll ue from users_enroll ue
inner join users_lesson_views ulv on ue.user_id = ulv.user_id left join users_lesson_views ulv on ue.user_id = ulv.user_id;
order by
user_id;
@@ -48,5 +48,4 @@ from
edu_platform.courses c edu_platform.courses c
LEFT JOIN enroll e ON c.id = e.course_id LEFT JOIN enroll e ON c.id = e.course_id
LEFT JOIN lessons l ON c.id = l.course_id LEFT JOIN lessons l ON c.id = l.course_id
LEFT JOIN views v ON c.id = v.course_id LEFT JOIN views v ON c.id = v.course_id;
ORDER BY c.id;
@@ -26,6 +26,4 @@ from
flv.course_id flv.course_id
) as t1 ) as t1
right join core.dim_lesson dl on dl.lesson_id = t1.lesson_id right join core.dim_lesson dl on dl.lesson_id = t1.lesson_id
left join core.dim_course dc on t1.course_id = dc.course_id left join core.dim_course dc on t1.course_id = dc.course_id;
ORDER by
t1.lesson_id;
@@ -4,7 +4,7 @@ DISTRIBUTED BY (user_id)
AS AS
select select
du.user_id as user_id, du.user_id as user_id,
du."name" as user_name, du.name as user_name,
du.email as email, du.email as email,
du.age as age, du.age as age,
COALESCE(e.enrollments_count, 0) as enrollments_count, COALESCE(e.enrollments_count, 0) as enrollments_count,
@@ -6,7 +6,7 @@ with activity_users as (
select select
e.user_id as user_id, e.user_id as user_id,
e.course_id as course_id, e.course_id as course_id,
COUNT(flv.viewed_at) as lessons_viewed COUNT(DISTINCT flv.viewed_at) as lessons_viewed
from from
core.enrollments e core.enrollments e
left join core.dim_lesson dl on e.course_id = dl.course_id left join core.dim_lesson dl on e.course_id = dl.course_id
@@ -23,7 +23,7 @@ course2 as (
course_id) course_id)
select select
au.user_id as user_id, au.user_id as user_id,
du."name" as user_name, du.name as user_name,
au.course_id as course_id, au.course_id as course_id,
dc.title as course_title, dc.title as course_title,
c2.lessons_in_course as lessons_in_course, c2.lessons_in_course as lessons_in_course,