Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql选择前n个值-按多个列的值排序和限制_Sql_Postgresql_Greatest N Per Group - Fatal编程技术网

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

sql选择前n个值-按多个列的值排序和限制,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我想了解为多列输出一定数量的顶级值(比如2)的逻辑。 这张桌子看起来有点像这样:有不同的班级、科目和学生。我想知道如何看待mars在每门学科和每堂课上得分最高的两名学生 表格示例: 等等 输出应该是什么样子的: 这可以通过以下方式轻松完成: 如果有一个以上的学生成绩相同,所有这些学生都会被列出。因此,这可以让两名以上的顶尖学生返回 如果你不想这样,用行数替换密集排列如果你只是键入数据而不是链接图片,对其他人来说会容易得多。您的第一个链接已断开,因此没有人能够为您回答此问题。非常感谢!我以前从未使

我想了解为多列输出一定数量的顶级值(比如2)的逻辑。 这张桌子看起来有点像这样:有不同的班级、科目和学生。我想知道如何看待mars在每门学科和每堂课上得分最高的两名学生

表格示例:

等等

输出应该是什么样子的:

这可以通过以下方式轻松完成:

如果有一个以上的学生成绩相同,所有这些学生都会被列出。因此,这可以让两名以上的顶尖学生返回


如果你不想这样,用行数替换密集排列

如果你只是键入数据而不是链接图片,对其他人来说会容易得多。您的第一个链接已断开,因此没有人能够为您回答此问题。非常感谢!我以前从未使用过窗口函数。我将尝试阅读更多关于它的信息。
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;