Oracle over 函数和 rank 函数学习

什么是 over 函数?

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

sum() over

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

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

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

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

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

rank() over

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

我们先来看一段sql

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

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

rank 函数

作为聚合函数

示例:

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

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

作为分析函数

示例:

1
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

查看评论