oracle的over(partition by id1 order by id2)和over(order by id2)
create table TEST
(
id1 VARCHAR2(6),
id2 VARCHAR2(6),
num VARCHAR2(6)
)
创建表test,字段有id1,id2,num三个字段,分别来看over(order by id2)和(partition by id1 order by id2)和over(partition by id2)
第一:over(partition by id2)
SELECT id1,id2,num,sum(num)over(partition by id2) FROM test
- 1
查询结果为:
和group by不同的是 虽然以id2分组:但是每个id2,就算是重复的,sum后的值 虽然是相同,但是查询的条数 和原来的条数完全相同,二group by 分组后,显示的只有分组的几条结果。在项目中应用到的环境是求每个id下的 的一个值所占的比例 就会用到:num/sum(num)over(partition by id2)而这种效果 group by 做不到。
第二:over(order by id2)
SELECT id1,id2,num,sum(num)over(order by id2) FROM test
- 1
查询结果显示如下:
和第一个不同的是,id2值为1时候 是4+11+9+7+2+5+4=42id2值为2时候 是用为1的时候42加上为2的值,以此类推
第三:over(partition by id1 order by id2)
SELECT id1,id2,num,sum(num)over(partition by id1 order by id2) FROM test
- 1
查询结果显示如下:
这里有id1和id2分别的限制,结果意思就是 先按照id1分组,然后再按照id分组的同时计算相同id2的值 但是 类似于第二个情况,值 是以此累加,只是加了一个条件,就是首先以id1为分组
第四:group by
SELECT id2, sum(num)FROM test group by id2
- 1
划船不用桨、杨帆不等风、一生全靠浪