SQL43 注册当天就完成了试卷的名单第三页
题目主要信息:
- 找到求职方向为算法工程师,且注册当天就完成了算法类试卷的人
- 按参加过的所有考试最高得分排名
- 排名榜很长,我们将采用分页展示,每页3条,现在需要你取出第3页(页码从1开始)的人的信息
问题拆解:
- 将 user_info, exam_record, examination_info JOIN 起来得到一张宽表。知识点:JOIN ON
- 对拼接得到的宽表数据做筛选。知识点:WHERE, DATEDIFF
- job='算法' 筛选出求职方向为算法工程师
- tag='算法' 筛选出算法类试卷
- DATEDIFF(register_time, submit_time) 筛选出用户注册和试卷提交在同一天
- 基于 uid 对统计结果进行聚合统计,统计出 MAX(score) 作为用户最高分数。知识点:MAX, GROUP BY
- 分页展示,每页3条,现在需要你取出第3页(页码从1开始) 实际上等同于展示第 7-9 条数据。可以通过 ORDER BY 根据最高分排序,通过 LIMIT 6, 3 筛选出所需的数据。知识点:ORDER BY, LIMIT
代码:
SELECT
user_info.uid,
MAX(user_info.level),
MAX(user_info.register_time),
MAX(exam_record.score)
FROM user_info JOIN exam_record
ON user_info.uid = exam_record.uid
JOIN examination_info
ON exam_record.exam_id = examination_info.exam_id
WHERE
user_info.job = '算法'
AND examination_info.tag = '算法'
AND DATEDIFF(user_info.register_time, exam_record.submit_time) = 0
GROUP BY user_info.uid
ORDER BY MAX(exam_record.score) DESC
LIMIT 6, 3