假设我有一个表名为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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123674 次 |
| 最近记录: |