sal表:
id pro_id amount
1 1 10
2 1 10
3 2 30
4 1 40
5 2 50
id pro_id rownumber
1 1 1
2 1 2
4 1 3
3 2 1
5 2 2
语句二结果:
id pro_id rank
1 1 1
2 1 1
4 1 3
3 2 1
5 2 2
语句三结果:
id pro_id dense_rank
1 1 1
2 1 1
4 1 2
3 2 1
5 2 2
test表:
id mc sl
1 111 1
1 222 1
1 333 2
1 555 3
1 666 3
2 666 1
2 222 1
2 333 2
2 555 2
select
id,mc,sl,
min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id) MINMC
,max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id) MAXMC
from test;
先以id分组,在分组后的结果内以sl来排序,first取排序后的第一个值(sl)的行,last取排序后的最后一个值(sl)的行(可能有多行,因为一个值可能对应多行),在取出的行中,min(mc)取这些行中mc最小的值,max(mc)取这些行中mc最大的值;
最后结果为:
id mc sl minmc maxmc
1 111 1 111 666
1 222 1 111 666
1 333 2 111 666
1 555 3 111 666
1 666 3 111 666
2 666 1 222 555
2 222 1 222 555
2 333 2 222 555
2 555 2 222 555
id pro_id amount
1 1 10
2 1 10
3 2 30
4 1 40
5 2 50
语句一结果:select id,pro_id,row_number() over (PARTITION by pro_id order by amount) rownumber from sal;--语句一
select id,pro_id,rank() over (PARTITION by pro_id order by amount) rank from sal;--语句二
select id,pro_id,dense_rank() over (PARTITION by pro_id order by amount)dense_rank from sal;--语句三
id pro_id rownumber
1 1 1
2 1 2
4 1 3
3 2 1
5 2 2
语句二结果:
id pro_id rank
1 1 1
2 1 1
4 1 3
3 2 1
5 2 2
语句三结果:
id pro_id dense_rank
1 1 1
2 1 1
4 1 2
3 2 1
5 2 2
test表:
id mc sl
1 111 1
1 222 1
1 333 2
1 555 3
1 666 3
2 666 1
2 222 1
2 333 2
2 555 2
select
id,mc,sl,
min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id) MINMC
,max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id) MAXMC
from test;
先以id分组,在分组后的结果内以sl来排序,first取排序后的第一个值(sl)的行,last取排序后的最后一个值(sl)的行(可能有多行,因为一个值可能对应多行),在取出的行中,min(mc)取这些行中mc最小的值,max(mc)取这些行中mc最大的值;
最后结果为:
id mc sl minmc maxmc
1 111 1 111 666
1 222 1 111 666
1 333 2 111 666
1 555 3 111 666
1 666 3 111 666
2 666 1 222 555
2 222 1 222 555
2 333 2 222 555
2 555 2 222 555