SQL 刷题/【腾讯】统计班级月度学习指标及课程内排名
上一题下一题困难通过率 0%

【腾讯】统计班级月度学习指标及课程内排名

JOIN 连接聚合函数窗口函数CASE WHEN日期函数用户行为分析面试真题

题目描述

来源:腾讯 SQL 面试真题

某在线教育平台需要按月评估各班级的活跃学习与完课情况,用于课后督学与教师考核。请基于班级信息、课程报名和学习日志三张表,统计 2024 年 8 月每个班级的关键指标及其在同课程内的排名。

数据表

course_class_ 班级信息表

字段类型说明
class_idINT班级编号,主键
course_idINT课程编号
teacher_idINT教师编号
start_dateDATE开班日期
end_dateDATE结课日期,可为 NULL,表示在读

course_enroll_ 报名记录表

字段类型说明
student_idINT学员编号
class_idINT班级编号
enroll_dateDATE报名日期

同一学生可以报名多个班级,同一班级内同一学生只出现一次。

study_logs_ 学习日志表

字段类型说明
student_idINT学员编号
class_idINT班级编号
lesson_idINT课节编号
watch_minutesINT学习分钟数,非负
finished_flagTINYINT(1)是否完成该课节,1 表示完成
log_tsDATETIME学习日志时间

题目要求

以 2024-08-01 至 2024-08-31 为统计窗口,每个班级输出一行:

  • class_idcourse_idteacher_id
  • learners_enrolled:班级报名人数。
  • learners_active_m:当月有学习日志的去重学员数。
  • finishers_m:当月至少完成过一个课节的去重学员数。
  • completion_rate:finishers_m / learners_active_m,活跃人数为 0 时记为 0,四舍五入保留 2 位小数。
  • total_minutes_m:当月总学习分钟数。
  • avg_minutes_per_active:total_minutes_m / learners_active_m,活跃人数为 0 时记为 0,四舍五入保留 2 位小数。
  • rank_in_course:在相同 course_id 内按 avg_minutes_per_active 降序使用 RANK() 排名。

结果按 course_id、rank_in_course、class_id 升序排列。要求使用全部三张表,并使用分组聚合、条件去重、日期过滤、窗口函数和空值处理。

数据样例

当前运行环境
class_idPKINTcourse_idINTteacher_idINTstart_dateDATEend_dateDATE
1011010012024-07-01NULL
1021010022024-07-15NULL
1031010032024-08-01NULL
2012020012024-06-012024-09-30
2022020022024-07-01NULL
2032020032024-08-10NULL
输入数据显示 6 / 6
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里