在MySQL8.0中新增了窗口函数的新特性,可以很容易的就实现分组的TopN的查询问题,但是在更低的版本中,需要使用稍微复杂一点的查询语句才能实现同样的效果。
准备工作
数据库版本
1 | SELECT |
表结构,创建一个学生成绩表,包含学生姓名,学科名和学科分数。
1 | CREATE TABLE `test` ( |
插入数据
1 | INSERT INTO test (name, course, score) |
数据内容
1 | SELECT |
Top1
查询分组内的最大值(最小值),查询每门学科的最高成绩对应的学生姓名和分数。
- 使用自联结
1 | SELECT |
- 使用关联子查询
1 | SELECT |
TopN
查询分组内的前(后)N个值,查询每门学科成绩最高的前两名对应的学生姓名和分数。
- 使用自联结
1 | SELECT |
- 使用关联子查询
1 | SELECT |