我想了解为多列输出一定数量的顶值(比如2)的逻辑。 表格看起来有点像:有不同的课程,科目和学生。我想知道如何只针对每个科目和班级的火星队的前2名学生进行评分
表格示例:
等等
输出应该是什么样的:
答案 0 :(得分:0)
select class, subject, student_id, marks_scored
from (
select class, subject, student_id, marks_scored,
dense_rank() over (partition by subject, class order by marks_scored desc) as rnk
from the_table
) t
where rnk <= 2
order by class, subject, marks_scored desc;
如果有多个学生的成绩相同,则会列出所有这些学生。所以这个可以返回两个以上的“优秀学生”。
如果您不想这样,请将dense_rank()
替换为row_number()