假设我有一个表名为employee,user_name,salary的员工.如何选择Oracle中薪水第二高的记录?
我用谷歌搜索,找到这个解决方案,是对的?:
select sal from
     (select rownum n,a.* from
        ( select distinct sal from emp order by sal desc) a)
where n = 2;
Fra*_*itt 22
已经建议使用RANK和DENSE_RANK - 根据您的要求,您可能还会考虑ROW_NUMBER():
select * from (
  select e.*, row_number() over (order by sal desc) rn from emp e
)
where rn = 2;
RANK(),DENSE_RANK()和ROW_NUMBER()之间的区别归结为:
所以,如果你只想要一个员工(即使有几个人的薪水排名第二),我建议你推荐ROW_NUMBER().
如果您使用的是Oracle 8+,则可以使用RANK()或DENSE_RANK()函数,如下所示
SELECT *
FROM (
  SELECT some_column, 
         rank() over (order by your_sort_column desc) as row_rank
) t
WHERE row_rank = 2;