Oracle over函数和rank函数学习

什么是over函数?

over函数简单说就是给Oracle的分析函数加条件,而比较常见的就是结合sum(),rank()函数使用

sum() over

select empno, ename, deptno, sal, sum(sal) over (partition by deptno) as depsal from scott.emp;

结果如图:
这里写图片描述
这句sql中,我们根据部门编号对部门进行了分区,然后根据分区,求出每个部分的工资总和

我们给上面的这条sql再加一个 order by

select empno, ename, deptno, sal, sum(sal) over (partition by deptno order by sal) as depsal from scott.emp;

结果如图:
这里写图片描述
可以看到,每个部门中的员工按照工资从低到高进行了排序

rank() over

rank 函数是分级函数,这个函数必须与over函数一起使用,否则会报错:缺少窗口函数

我们先来看一段sql

select empno, sal, job, rank() over(partition by job order by sal desc) as sallevel from scott.emp;

结果如图:
这里写图片描述
我们可以清楚的看到,每个部门岗位不同薪资的排名情况

rank 函数

作为聚合函数

示例:

select rank(2000) within group(order by sal desc) as rank from scott.emp;

该sql可以计算出薪水为2000的员工,按照薪水从高到低的一个排名

作为分析函数

示例:

select ename, sal, rank() over(order by sal desc) as rank from scott.emp;

该sql将公司内员工的工资从高到低的排序

rank 和 dense_rank的区别

rank:如果有5个人,其中有两个人的排名一样,则返回类似以下结果:1,2,2,4,5
dense_rank:如果有5个人,其中有两个人的排名一样,则返回类似以下结果:1,2,2,3,4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值