现在的位置: 首页 > 综合 > 正文

oracle partition by 与 partition by … order by 分组

2012年08月15日 ⁄ 综合 ⁄ 共 1574字 ⁄ 字号 评论关闭

partition by

partition by ... order by

用法区别,刚使用到,迷迷糊糊的

如:表t

  A                B                C                

 1                 43              2013-4-17

 2                 33              2013-4-18

 3                 10              2013-4-17

使用

partition by:

在使用rank()时,需要使用order by

Select  rank() over(partition by C  order by B desc) as rank,C, B,A  from t

这样结果是:

rank        C                 B               A                           

1          2013-4-17     43               1

2          2013-4-17     10               3

1          2013-4-18     33               2

对它进行了分级显示,同一日期的则根据order by 的排序方法以一个等级往上升

现在如果我现在要查询每一天当中最B列值最大的,那么:

Select   * from

(

Select  rank() over(partition by C  order by B desc) as rank,

C, B,A  from t

)  table

where table.rank = 1

那么这样子就查询出每一天最高的一条记录

rank        C                 B               A                          

1          2013-4-17     43               1

1          2013-4-18     33               2

 

现在使用sum()或count()这些函数进行使用

如:查询每一天的B列的总和

select sum(B) over(partition by C order by C ASC) as sum,

C, B,A  from t

如果这里还加上order by ,则表示累计这个时间以上的数据,那么这里就会出现

sum           C              B               A

1          2013-4-17     43               1

53          2013-4-17    10              3

33          2013-4-18     33               2

如果不加order by ,即:

select sum(B) over(partition by C) as sum,

C, B  from t

则不会累计之前的,只要显示最后的数据,但是多条的;

sum           C              B               A

53         2013-4-17     43              1

53          2013-4-17    10              3

33          2013-4-18     33               2

这样子,如果求每天总和,即

select sum,C from

(

select sum(B) over(partition by C) as sum,

C, B  from t

) tt

group by sum, B,C

这样就可以得到

sum           C            

53         2013-4-17   

33          2013-4-18

抱歉!评论已关闭.