SQL查询:获取当前成绩高于自身历史最高成绩的学生ID
SQL查询问题解法
错误原因
你原有语句的问题是子查询没有和外层的student表做学生ID关联,导致子查询统一返回studentlastmarks全表的最高成绩,无法实现按单个学生匹配其历史最高分的需求。
正确解法
写法1:关联子查询
适合小数据量场景,逻辑直观:
SELECT s.studentid FROM student s WHERE s.marks > ( SELECT MAX(sl.marks) FROM studentlastmarks sl WHERE sl.studentid = s.studentid )
子查询会针对外层每一行学生数据,单独筛选对应ID的历史成绩计算最大值,再和当前成绩做对比。
写法2:分组聚合后关联查询
数据量较大时性能更优,先批量计算所有学生的历史最高分再统一匹配:
SELECT s.studentid FROM student s JOIN ( SELECT studentid, MAX(marks) AS max_history_mark FROM studentlastmarks GROUP BY studentid ) sl_max ON s.studentid = sl_max.studentid WHERE s.marks > sl_max.max_history_mark
两种写法运行示例数据都会返回studentid为2和4的结果,符合需求。
内容的提问来源于stack exchange,提问作者Arrow
相关产品推荐
相关产品推荐

