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