Oracle中查询各个部门薪水第二第三高的员工姓名

Oracle中查询各个部门薪水第二第三高的员工姓名

问题描述:

Oracle中查询各个部门薪水第二第三高的员工姓名
只能一句话写出来不可以分两步

select * from (select 部门,姓名,row_number() over(partition by 部门 order by 薪水 desc) as rid from 表) a where rid in (2,3) order by 部门,rid

oracle 里有 row_number 开窗函数,使用row_number对部分进行分组,并按薪水排序即可得到排名序号,如果有薪水重复的,用 rank或dense_rank代替row_number,具体oracle里这两个函数是否是这个名字我并不确定,你可以尝试一下

select * from (
select *,row_number() over(partition by 员工,部门 order by 薪水 desc) as rn
) a where rn = 2 or rn = 3

首先对原表以薪水降序排序,再以之为原表从中查出前三,以部门分组,并以薪水升序排列,再再以之为原表,选出前二,以部门分组,再次颠倒顺序