本来不太想写的,感觉有点简单, 后来想到这类需求在实际的场景中用的不多, 就当以后看看吧,
需求模拟:
现在要查询 各个部门中月薪排列在第二的人员 基本信息。
首先这个网友的需求 我感觉是模糊的, 比如说 月薪排列为 5000,5000, 5000, 4500,3000...... 这样, 那第二怎么算? 是5000? 还是4500? 我不知道, 但我感觉是 4500的可能性要大一点。
上诉 的要求是查询出
这个就是 每个部门中 月薪第二大的员工信息
哥有两种方案:
1 select * from ( select p.*, dense_rank() over( partition by deptno order by sal desc) d from scott.emp p) p where p.d=2;
2 select * from (
select p.*, nth_value(sal,2) from last over ( partition by deptno order by sal rows between unbounded preceding and unbounded following ) p from scott.emp p
) where sal = p
但由于哥说的 需求不明确的地方, 哥还是选择了第一种方案, 第二种方案 当数据有并列的情况下, 会有重复, 不过此类方案的选择 还需要看需求。