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

Oracle 分析函数使用一

2011-09-27 10:59 337 查看

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 --区别

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle c