在实际工作中,有时我们需要用SQL语句对数据分组后取出每一组内的某一条(如第1条,第2条……第n条,或者第1大/小,第2大/小……第n大/小)记录,下面将介绍实现这一需求的最简单的SQL查询方式。
需求:查询每门课程成绩排名第3的学生姓名,对应的课程名称和成绩
思路:
1. 按照课程名称(course)字段对上表score进行分组,再按照成绩(point) 对每个分组内的记录进行降序排列,同时使用序号函数(根据实际需要在row_number(), dense_rank()和rank()之间选择,本例选择dense_rank()函数)对每组内经过降序排列的成绩生成序号:
执行以下代码:
select course,name,point, dense_rank() over( partition by course order by point desc) 成绩排名
from score;
得到结果如下: