Oracle存储函数与rownum

写这篇博客单纯是这两个问题一块碰到了,所以写一下记录一下,用到的表是Employee表,数据如下
在这里插入图片描述
我们需要一个存储函数来返回薪水第N高的是多少
那么,一步一步来,首先,将salary倒叙排列并去重

select distinct salary from employee order by salary desc;

然后将这个作为一张表,假如查询第三高的薪资,我们最起码需要先把排名前三的工资查出来

select salary,rownum as num from (select distinct salary from employee order by salary desc)where rownum<4;

这里我们要说一下,为什么要给rownum起个别名,如果,rownum可以做等于比较,我们是不是直接rownum=3就是第三高的了,但是,经过我的测试,rownum只能做小于比较,如果直接where条件写rownum=3是没值的,而且也不能做大于比较,这时候,我们可以这样想,如果这个rownum作为一个新的表的一列而不是系统的rownum,是不是就可以比较了,起个别名,就可达到这样的效果。
所以我们接下来就可以直接取出第三高的薪资了。

select salary from (select salary,rownum as num from (select distinct salary from employee order by salary desc)where rownum<4)where num=3;

这时候我们如果要获取第N高的薪资,需要与用户交互,用户输入几,就是第几高的薪资,就需要用到存储函数了

Create Function Get_Salary_BYN(
N IN NUMBER#定义传入参数的类型
)return number#存储函数需要return一个返回值类型
is
result number;#定义变量
begin
select NVL(salary,NULL) into result from (select salary,rownum as num from (select distinct salary from employee order by salary desc)where rownum<N+1)where num=N;
return result;#返回result
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值