sql窗口函数——如何取班级每科成绩的前三名
在 SQL 中,窗口函数可以用来对结果集进行分组和排序。要获取每个班级每科成绩的前三名,可以使用 ROW_NUMBER() 函数,结合 PARTITION BY 和 ORDER BY 子句。以下是一个示例查询,假设你的表结构如下:
表名:grades
列:class_id(班级ID),subject(科目),student_id(学生ID),score(成绩)
你可以使用以下 SQL 查询来获取每个班级每科成绩的前三名:
SELECT class_id, subject, student_id, score
FROM (
SELECT
class_id,
subject,
student_id,
score,
ROW_NUMBER() OVER (PARTITION BY class_id, subject ORDER BY score DESC) AS rank
FROM grades
) AS ranked
WHERE rank <= 3
ORDER BY class_id, subject, rank;
内层查询:
使用 ROW_NUMBER() 窗口函数为每个班级每科的学生按成绩降序排列分配一个排名。
PARTITION BY class_id, subject 表示对每个班级的每科进行分组。
ORDER BY score DESC 表示按成绩降序排列。
外层查询:
从内层查询的结果中筛选出排名在前三名(rank <= 3)的记录。
最后对结果按班级ID、科目和排名进行排序。
————————————————
原文链接:https://blog.csdn.net/Oxford1151/article/details/143452219