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

统计每个班级的关键指标

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

WITH t1 AS(    
    SELECT 
        ce.class_id,
        COUNT(DISTINCT ce.student_id) learners_enrolled,
        COUNT(DISTINCT sl.student_id) learners_active_m,
        COUNT(DISTINCT CASE 
                            WHEN finished_flag = 1 THEN sl.student_id
                        END) finishers_m,
        IFNULL(SUM(watch_minutes), 0) total_minutes_m
    FROM course_enroll_ ce 
    LEFT JOIN study_logs_ sl ON ce.student_id = sl.student_id AND ce.class_id = sl.class_id
    AND log_ts BETWEEN '2024-08-01' AND '2024-08-31'  
    GROUP BY ce.class_id
	-- 当按 sl.class_id 分组时,那些在study_logs_中没有8月份记录的班级(如class_id 201)会被分组为NULL,导致数据丢失。
)
SELECT 
    cc.class_id,
    cc.course_id,
    cc.teacher_id,
    learners_enrolled,
    learners_active_m,
    finishers_m,
    ROUND(IFNULL(finishers_m/learners_active_m, 0), 2) completion_rate,
    total_minutes_m,
    ROUND(IFNULL(total_minutes_m/learners_active_m, 0), 2) avg_minutes_per_active,
    RANK()OVER(PARTITION BY course_id ORDER BY ROUND(IFNULL(total_minutes_m/learners_active_m, 0), 2) DESC) rank_in_course
FROM t1 
JOIN course_class_ cc ON cc.class_id = t1.class_id
ORDER BY cc.course_id, rank_in_course, cc.class_id

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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