oracle 分析函数之 over 用法

Oracle 语法之 OVER (PARTITION BY ..)
select * from test

数据:
A B C
1 1 1
1 2 2
1 3 3
2 2 5
3 4 6

 

---将B列值相同的对应的C 列值加总
select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum
from test

A B C C_SUM
1 1 1 1
1 2 2 7
2 2 5 7
1 3 3 3
3 4 6 6

PARTITION BY B : 把B列进行分割(本人觉得分割有点类似于分组group by,但不等于分组)

我们先来分析一下 C_SUM 的结果是怎么出来的.

B列总共有四个值: 1 2 3 4. 第一行的C_SUM值为1, 因为所对应的C列值为1; 第二行的C_SUM值为7. 为什么呢?因为B列中值为2的行总共有两列,所以 SUM(C) 的值为 7 (等于两个C列的相加 2+5 = 7). B列下面的值3 4原理同第一列的值1.

 ---如果不需要已某个列的值分割,那就要用 null

eg: 就是将C的列值summary 放在每行后面

select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum
from test

A B C C_SUM
1 1 1 17
1 2 2 17
1 3 3 17
2 2 5 17
3 4 6 17

因为没有分割列,所以C_SUM的值为所有C列的值的和. 17=1+2+3+5+6.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mantisXF/archive/2007/07/17/1695441.aspx

posted @ 2009-07-25 10:05  WenEric  阅读(256)  评论(0编辑  收藏  举报