|
Skye_to_Skye 发表于 2014-7-1 18:36 ![]()
这里面省略了partition by 能解释下么?
分解看,应该能明白吧。
with t as(
select 1 a,'A'b from dual union
select 1 a,'B'b from dual union
select 1 a,'A'b from dual union
select 2 a,'B'b from dual union
select 2 a,'C'b from dual union
select 3 a,'A'b from dual union
select 4 a,'A'b from dual union
select 4 a,'D'b from dual union
select 4 a,'E'b from dual union
select 5 a,'A'b from dual
)
select t.*
,row_number()over(partition by b order by a) rn
from t;
A B RN
---------- - ----------
1 A 1
3 A 2
4 A 3
5 A 4
1 B 1
2 B 2
2 C 1
4 D 1
4 E 1
with t as(
select 1 a,'A'b from dual union
select 1 a,'B'b from dual union
select 1 a,'A'b from dual union
select 2 a,'B'b from dual union
select 2 a,'C'b from dual union
select 3 a,'A'b from dual union
select 4 a,'A'b from dual union
select 4 a,'D'b from dual union
select 4 a,'E'b from dual union
select 5 a,'A'b from dual
)
select t1.a ,t1.b
,rn
,decode(rn,1,1,0)
,sum(decode(rn,1,1,0))over( order by a, b) b_cnt
from (
select t.*
,row_number()over(partition by b order by a) rn
from t
) t1
A B RN DECODE(RN,1,1,0) B_CNT
---------- - ---------- ---------------- ----------
1 A 1 1 1
1 B 1 1 2
2 B 2 0 2
2 C 1 1 3
3 A 2 0 3
4 A 3 0 3
4 D 1 1 4
4 E 1 1 5
5 A 4 0 5
with t as(
select 1 a,'A'b from dual union
select 1 a,'B'b from dual union
select 1 a,'A'b from dual union
select 2 a,'B'b from dual union
select 2 a,'C'b from dual union
select 3 a,'A'b from dual union
select 4 a,'A'b from dual union
select 4 a,'D'b from dual union
select 4 a,'E'b from dual union
select 5 a,'A'b from dual
)
select t2.a ,max(b_cnt) b_cnt
from (
select t1.a ,t1.b
,sum(decode(rn,1,1,0))over( order by a, b) b_cnt
from (
select t.*
,row_number()over(partition by b order by a) rn
from t
) t1
) t2
group by t2.a;
A B_CNT
---------- ----------
1 2
2 3
3 3
4 5
5 5
|
|