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 

查询结果为:

和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 

查询结果显示如下:

和第一个不同的是,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

查询结果显示如下:

这里有id1和id2分别的限制,结果意思就是 先按照id1分组,然后再按照id分组的同时计算相同id2的值 但是 类似于第二个情况,值 是以此累加,只是加了一个条件,就是首先以id1为分组

第四:group by

SELECT id2, sum(num)FROM test group by id2



分享给朋友:
您可能感兴趣的文章:
随机阅读: