当前位置:数据库 > Oracle >>

oracle partition by与partition by...order by分组

oracle partition by与partition by...order by分组
 
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
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,