【字节跳动】统计高级课程学员的内容反馈质量
JOIN 连接聚合函数CASE WHEN日期函数用户行为分析面试真题
题目描述
来源:字节跳动 SQL 面试真题
某在线教育平台希望分析完成高级课程的学员对课程内容的评价情况,识别高参与度且能提供高质量反馈的学员。
数据表
course_completions 课程完成记录表
| 字段 | 类型 | 说明 |
|---|---|---|
| completion_id | INT | 完成记录唯一编号,主键 |
| user_id | INT | 学员唯一编号 |
| course_id | VARCHAR | 课程唯一标识 |
| completion_date | DATE | 课程完成日期 |
content_reviews 内容评价表
| 字段 | 类型 | 说明 |
|---|---|---|
| review_id | INT | 评价唯一编号,主键 |
| user_id | INT | 提交评价的学员 ID |
| course_id | VARCHAR | 评价所属课程 ID |
| rating | INT | 评价星级,范围 1-5 |
| review_date | DATETIME | 评价提交时间 |
题目要求
查询在 2025 年 3 月完成 DS-102(数据科学进阶)课程的所有学员。
对这些学员计算:
average_rating:该学员对DS-102的全部评价平均星级,四舍五入保留 2 位小数。latest_review_date:该学员提交任意课程评价的最近日期,格式为YYYY-MM-DD。- 平均星级大于等于 4.0 时,
feedback_type为“优质反馈学员”,否则为“普通反馈学员”。
如果学员没有提交过 DS-102 评价,平均星级保留为 NULL,并归入“普通反馈学员”;如果完全没有评价,最近评价日期也为 NULL。
排序规则:
feedback_type升序,“普通反馈学员”在前。average_rating降序。user_id升序。
数据样例
| completion_idPKINT | user_idINT | course_idVARCHAR(50) | completion_dateDATE |
|---|---|---|---|
| 1001 | 101 | DS-102 | 2025-03-05 |
| 1002 | 101 | DS-102 | 2025-03-20 |
| 1003 | 102 | DS-102 | 2025-03-10 |
| 1004 | 103 | DS-102 | 2025-03-31 |
| 1005 | 104 | DS-102 | 2025-03-01 |
| 1006 | 105 | DS-102 | 2025-02-28 |
| 1007 | 106 | DS-102 | 2025-04-01 |
| 1008 | 107 | DS-101 | 2025-03-15 |
输入数据显示 8 / 8 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里