Oracle over函数和rank函数学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012414590/article/details/72550915

什么是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将公司内员工的工资从高到低的排序

扫描二维码关注公众号,回复: 6746372 查看本文章

rank 和 dense_rank的区别

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

猜你喜欢

转载自blog.csdn.net/u012414590/article/details/72550915
今日推荐