在 Oracle 中选择第二个最小值

问题描述 投票:0回答:4

我需要编写一个查询来选择一个最小值,并且它是整数列表中的第二个最小值。

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

select min(value) from table;

但是第二小的就不那么明显了。

郑重声明,这个整数列表不是连续的——最小值可以是 1000,第二大的最小值可以是 10000。

sql oracle oracle11g greatest-n-per-group
4个回答
16
投票

使用分析函数

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

分析函数

RANK
DENSE_RANK
ROW_NUMBER
除了处理关系的方式不同之外,其他都是相同的。
RANK
使用体育风格的打破平局的过程,因此如果两行并列排名 1,则下一行的排名为 3。
DENSE_RANK
为并列第一名的两行排名为 1,然后为下一行分配 2 的等级。
ROW_NUMBER
任意打破平局,并为具有最低值的两行之一赋予 1 的等级,将另一行赋予 2 的等级。


7
投票
select 
  value
from
  (select 
    value, 
    dense_rank() over (order by value) rank
  from 
    table)
where
  rank = 2

优点:您可以轻松获得第三个值,或者最后 10 行(排名 <= 10).

请注意,此查询的性能将受益于“value”上的正确索引。


6
投票
SELECT MIN(value)
FROM TABLE
WHERE Value > (SELECT MIN(value) FROM TABLE)

0
投票

从账单中选择 min(fine_amount) 作为 secondary_min_fine_amount,其中fine_amount 不在其中(从账单中选择 min(fine_amount));

© www.soinside.com 2019 - 2024. All rights reserved.