您的位置:首页 > 数据库 > Oracle

oracle中的分析函数的使用

2016-04-07 17:25 531 查看
之前进行数据统计时一直用的group by,各种子查询,外链接等等。虽然知道分析函数却用的不太多。最近对分析函数进行进一步的学习,整理一些学习成果。

分析函数语法:

Analytic-Function(<Argument>,<Argument>,…)
over(
<Query-Partition-Clause>
<Order-by-Clause>
<Windowing-Clause>
)


实例:

SELECT ename 姓名,
deptno 部门,
sal 薪资,
--该员工所在部门的薪资总和
SUM(nvl(sal,0)) over (partition BY deptno ORDER BY deptno) 部门薪资总和 ,
--该员工所在部门的最高薪资
MAX(nvl(sal,0)) over(partition BY deptno ORDER BY deptno) 部门薪资最大值,
--该员工在该部门薪资排行
row_number() over(partition BY deptno ORDER BY nvl(sal,0) desc) 该员工在该部门薪资排行,
--该员工在该部门薪资占比(百分制,保留两位小数)
round(RATIO_TO_REPORT(nvl(sal,0)) over(partition BY deptno) * 100 ,2)该员工在该部门薪资占比,
--该员工在全部部门薪资排行
row_number() over( ORDER BY nvl(sal,0) desc) 该员工在全部部门薪资排行,
--该员工的薪资打败了百分之多少的人
round((1-PERCENT_RANK() over( order by nvl(sal,0) desc) )* 100 ,2)打败占比
FROM emp order by deptno


结果如下:



上面我使用的是当
nvl
定义当
sal
为空时,让其为0,这样一方面的考虑合理性,另一方面是避免空值位于no.1,做排名时,oracle默认将空值置于第一位。当然你也可以使用
NULLS LAST
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: