Oracle查询出第N高薪水的值

案例:编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary),若无第N高薪水,则为null。(源自力扣题库,该提题库提交代码结果有误,以下亲测无误,以自测结果为准)
一、创建EMPLOYEE的表

create table EMPLOYEE
(
  id     NUMBER,
 salary NUMBER
)

数据:
在这里插入图片描述

二、实现过程
创建自定义函数
case:当不存在第N高薪水时,查询结果为null
否则:三层select嵌套,最内层按降序排列薪水,外层查询出薪水及对应的列序号并重命名rn;最外层查询出第N 高薪水,条件为rn列序号。
注:查询结果会查出N次结果,值一样,故需要加行号数加以控制才可返回唯一值。

CREATE or replace FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER 		
IS
result NUMBER;
BEGIN
   select case
     when (select count(distinct Salary) from Employee) >N then
      null
     else
      (select Salary
         from (select Salary, rownum rn
                 from (select distinct Salary
                         from Employee
                        order by Salary desc))
        where rn = N)
   END INTO result
from Employee
where rownum <= 1;
RETURN result;
END;

三、检查执行结果

select getNthHighestSalary(2) from dual

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值