得到结果:
A B C SUM(C)OVER(PARTITIONBYA)
-- -- ------- ------------------------
h b 3 3
m a 2 4
m a 2 4
n a 3 6
n b 2 6
n b 1 6
x b 3 9
x b 2 9
x b 4 9
如果用sum,group by 则只能得到
A SUM(C)
-- ----------------------
h 3
m 4
n 6
x 9
无法得到B列值
=====
二:开窗函数
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1.
| over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数 over(partition by deptno)按照部门分区 |
2.
| over(order by salary range between 5 preceding and 5 following) |
每行对应的数据窗口是之前行幅度值不超过5,之后行幅度值不超过5
例如:对于以下列
aa
1
2
2
2
3
4
5
6
7
9
得出的结果是
A A SUM
---------------------- -------------------------------------------------------
1 1 0
2 1 4
2 1 4
2 1 4
3 1 8
4 1 8
5 2 2
6 1 8
7 2 2
9 9
就是说,对于aa=5的一行 ,sum为 5-1<=aa<=5+2 的和
对于aa=2来说 ,sum=1+2+2+2+3+4=14 ;
又如 对于aa=9 ,9-1<=aa<=9+2 只有9一个数,所以sum=9 ;
3:其它:
| over(order by salary rows between 2 preceding and 4 following) |
每行对应的数据窗口是之前2行,之后4行
| over(order by salary rows between 2 preceding and 4 following) |
每行对应的数据窗口是之前2行,之后4行
4:下面三条语句等效:
| over(order by salary rows between unbounded preceding and unbounded following) |
每行对应的数据窗口是从第一行到最后一行,等效:
| over(order by salary range between unbounded preceding and unbounded following) |



评论加载中…
