ITPub博客

首页 > 数据库 > Oracle > orecle分析函数

orecle分析函数

原创 Oracle 作者:Taiaishua 时间:2018-10-29 19:59:17 0 删除 编辑

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防止为空还在查询里的结果最前面。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537584/viewspace-2217979/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle DBlink
下一篇: ORACLE JOB
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    55
  • 访问量
    51688