sql选择前n个值 - 按多列的值排序和限制

时间:2016-05-11 20:39:12

标签: sql postgresql greatest-n-per-group

我想了解为多列输出一定数量的顶值(比如2)的逻辑。 表格看起来有点像:有不同的课程,科目和学生。我想知道如何只针对每个科目和班级的火星队的前2名学生进行评分

表格示例:

sample data

等等

输出应该是什么样的: result output

1 个答案:

答案 0 :(得分:0)

使用window functions

可以轻松完成此操作
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()