oracle 分析函数之 over 用法

来源:互联网 发布:ajax后台获取前端数据 编辑:程序博客网 时间:2024/06/06 20:23

 本文转载自: http://blog.csdn.net/mantisxf/article/details/1695441

仅供个人学习提高使用。

 

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.

 

 

原创粉丝点击