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