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