题解 | 统计每个班级的关键指标

统计每个班级的关键指标

https://www.nowcoder.com/practice/07beee54ac62455586016ea1b018d371

分表分的有点麻烦 t1和t2还能在处理一下

with t1 as (
    select student_id,class_id,lesson_id,watch_minutes,finished_flag,log_ts
    from study_logs_ 
    where finished_flag = 1 and mid(log_ts,1,7) = '2024-08'
),
t2 as (
    select student_id,class_id,lesson_id,watch_minutes,finished_flag,log_ts
    from study_logs_ 
    where mid(log_ts,1,7) = '2024-08'
),
t3 as (
    select ce.class_id,course_id,teacher_id,
    count(distinct ce.student_id) learners_enrolled,
    count(distinct t2.student_id) learners_active_m,
    count(distinct t1.student_id) finishers_m,
    rank()over(partition by course_id order by ifnull(round(ifnull(sum(t2.watch_minutes),0)/count(distinct t2.student_id),2),0) desc) rank_in_course
    from course_enroll_ ce 
    left join course_class_ cc 
    on ce.class_id = cc.class_id
    left join t1
    on ce.student_id = t1.student_id and ce.class_id = t1.class_id
    left join t2
    on ce.student_id = t2.student_id and ce.class_id = t2.class_id
    group by ce.class_id,course_id,teacher_id
    order by course_id,rank_in_course,class_id    
)
select t3.class_id,course_id,teacher_id,learners_enrolled,learners_active_m,finishers_m,
ifnull(round(finishers_m/learners_active_m,2),0) completion_rate,
ifnull(sum(t2.watch_minutes),0) total_minutes_m,
ifnull(round(sum(t2.watch_minutes)/learners_active_m,2),0) avg_minutes_per_active,
rank_in_course
from t3 left join t2 on t3.class_id = t2.class_id
group by t3.class_id,course_id,teacher_id

全部评论

相关推荐

狸猫换offer:神通广大的互联网
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务