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

这里写图片描述

posted @ 2017-11-07 21:53  十月围城小童鞋  阅读(381)  评论(0编辑  收藏  举报