Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 选择Oracle中第二个最小值_Sql_Oracle_Oracle11g_Greatest N Per Group - Fatal编程技术网

Sql 选择Oracle中第二个最小值

Sql 选择Oracle中第二个最小值,sql,oracle,oracle11g,greatest-n-per-group,Sql,Oracle,Oracle11g,Greatest N Per Group,我需要编写一个查询,从整数列表中选择一个最小值和第二个最小值 抓住最小值是显而易见的: select min(value) from table; 但第二个最小的则不那么明显 对于记录,这个整数列表不是连续的-最小值可以是1000,第二大最小值可以是10000 SELECT MIN(value) FROM TABLE WHERE Value > (SELECT MIN(value) FROM TABLE) 优点:您可以同样轻松地获得第三个值,或者使用分析函数获得底部10行的排名 SEL

我需要编写一个查询,从整数列表中选择一个最小值和第二个最小值

抓住最小值是显而易见的:

select min(value) from table;
但第二个最小的则不那么明显

对于记录,这个整数列表不是连续的-最小值可以是1000,第二大最小值可以是10000

SELECT MIN(value)
FROM TABLE
WHERE Value > (SELECT MIN(value) FROM TABLE)

优点:您可以同样轻松地获得第三个值,或者使用分析函数获得底部10行的排名

SELECT value
  FROM (SELECT value,
               dense_rank() over (order by value asc) rnk
          FROM table)
 WHERE rnk = 2

分析函数RANK、DENSE_RANK和ROW_NUMBER是相同的,只是它们处理关系的方式不同。排名使用体育风格的打破平局的过程,因此,如果两排的排名为1,那么下一排的排名为3。稠密_秩为并列第一名的两行指定秩为1,然后为下一行指定秩为2。ROW_NUMBER任意打破平局,给出两行中最低值的一行秩为1,另一行秩为2。

请注意,这需要敲表两次,因此比解析函数解更昂贵。如前所述,当您想要第3行、第5行或第10行时,它也很难扩展。您可以对表中的行数*进行计数,这些行的值小于外部查询中的当前行,外部查询更易于扩展,但效率要低得多。我对您的解决方案进行了升级,因为它很聪明,但我不会使用它。+1与我发布的解决方案相同,但是有一个很好的额外解释三个相似的分析函数之间的差异。分析函数!为什么我以前没想到他们呢。我感谢你的帮助和解释。
SELECT value
  FROM (SELECT value,
               dense_rank() over (order by value asc) rnk
          FROM table)
 WHERE rnk = 2