Oracle 分析函数使用一

1.1.1    over 分析函数用法
1.  用法
   sum(salary) over( order by employee) --按照员工的薪水逐条累计显示
   sum(sal) over (partition by deptno order by ename) --分部门连续求总和
   sum(sal) over (partition by deptno) --分部门求总和
   sum(sal) over (order by deptno,ename) --按部门、员工连续求总和
   sum(sal) over () --不按部门,求所有员工总和,效果等同于sum(sal)
2.  使用
--例如:
select ename,
       sal,
       sum(sal) over(order by ename) 连续求和,
       sum(sal) over() 总和,
       100 * round(sal / sum(sal) over(), 4) "份额(%)"
  from emp;
ENAME          SAL 连续求和     总和 份额(%)
---------- ---------- ---------- ---------- ----------
ADAMS          1100     1100    29025    3.79
ALLEN          1600     2700    29025    5.51
BLAKE          2850     5550    29025    9.82
CLARK          2450     8000    29025    8.44


/*体会说明:在"... from emp;"后面不要加order by 子句,
 使用的分析函数的(partition by deptno order by  sal)里已经有排序的语句了,
 如果再在句尾添加排序子句,一致倒罢了,不一致,结果就令人费劲了*/
1.1.2    Rank() 分析函数用法
1.  用法
  rank() over( partition by col1 order by col2)
  dense_rank over( partition by col1 order by col2)
功能:按照col1进行划分,并根据col2排序的结果给col评级,如果col2值相同,则评级值相同。
区别【dense_rank与rank()】:dence_rank 在处理相同的等级时,等级的数值不会跳过。
                               rank则跳过,即rank的级值可能是不连续的。
2.  使用
--例如:表test3:A B C
a          liu          wang
a          jin          shu
a          cai          kai
b          yang         du
b          lin          ying
b          yao          cai
b          yang         99
--例如:当rank时为:
select m.a,m.b,m.c,rank() over(partitionby a orderby b) liu from test3 m;
A          B             C          LIU
a          cai          kai         1
a          jin          shu         2
a          liu          wang        3
b          lin          ying        1
b          yang         du          2
b          yang         99          2
b          yao          cai         4 --区别
--而如果用dense_rank时为:
select m.a,m.b,m.c,dense_rank() over(partitionby aorderby b)  liu from test3 m;
A          B             C          LIU
a          cai          kai         1
a          jin          shu         2
a          liu          wang        3
b          lin          ying        1
b          yang         du          2
b          yang         99          2
b          yao          cai         3 --区别
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值