orecle分析函数

来源:这里教程网 时间:2026-03-03 12:12:48 作者:

ORACLE分析函数:

是一种对批量数据进行处理的函数。

举例说明:

例1:

   查询出员工的姓名、工资、所在部门的平均工资, 要求显示出来的是工资大于部门平均工资的员工。   select p.* from (select ename,sal,avg(sal) over (partition by deptno) avg_sal   from emp) p where sal>avg_sal; 这就是批量处理的数据结果,所以分析函数用来进行批量处理数据效率很高。

例二:

求工资与奖金和占本部门每月所有员工工资与奖金和的20%以上的员工 。 select p.*,sal+nvl(comm,0) sal_comm,round((sal+nvl(comm,0))/p.sum_sal_nvl,2)*100||'%' from  (select ename,empno,sal,comm,sum(sal+nvl(comm,0)) over (partition by deptno)  sum_sal_nvl from emp) p where sal+nvl(comm,0)>p.sum_sal_nvl*0.2;

例三:

查看一下emp表员工的工资数据,按降序排序: select empno,ename,sal from emp order by sal desc; 如果我们现在需要选出前三高的工资的人,并且重复的不算 按照rownumber排序: select ename,empno,sal from (select ename,empno,sal from emp order by sal desc ) where rownum<=3; 如图 因为SCOTT和FORD的工资都是3200所以按照ROWNUMBER排序并不能符合我们的要求。 所以现在我们采用分析函数的方法: 使用分析函数dense_rank() 选出前三的人: select p.* from (select ename,empno,sal,dense_rank() over (order by sal desc) denserank from emp) p where denserank<=3;

例四:

dense_rank()的另一种用法 过虑如下问题:需要求出工资排名第一和排名倒数第一的员工,如何解答? select min(ename) keep(dense_rank first order by sal desc nulls last), min(ename) keep(dense_rank last order by sal desc nulls last) from emp; first和last限制位置,nulls last防止为空还在查询里的结果最前面。

相关推荐