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