三个分析函数的区分:
① | select id, name, n from ( | |||||
select id, name, row_number() over(order by id desc) n | ||||||
from testtable) | ||||||
NO | ID | NAME | N | |||
1 | 95 | f2 | 1 | |||
2 | 90 | f1 | 2 | |||
3 | 90 | f3 | 3 | |||
4 | 85 | f6 | 4 | |||
5 | 80 | f4 | 5 | |||
6 | 80 | f5 | 6 | |||
7 | 70 | f7 | 7 | |||
8 | 60 | f8 | 8 |
② | select id, name, n from ( | |||||
select id, name, rank() over(order by id desc) n | ||||||
from testtable) | ||||||
NO | ID | NAME | N | |||
1 | 95 | f2 | 1 | |||
2 | 90 | f1 | 2 | |||
3 | 90 | f3 | 2 | |||
4 | 85 | f6 | 4 | |||
5 | 80 | f4 | 5 | |||
6 | 80 | f5 | 5 | |||
7 | 70 | f7 | 7 | |||
8 | 60 | f8 | 8 |
③ | select id, name, n from ( | |||||
select id, name, dense_rank() over(order by id desc) n | ||||||
from testtable) | ||||||
NO | ID | NAME | N | |||
1 | 95 | f2 | 1 | |||
2 | 90 | f1 | 2 | |||
3 | 90 | f3 | 2 | |||
4 | 85 | f6 | 3 | |||
5 | 80 | f4 | 4 | |||
6 | 80 | f5 | 4 | |||
7 | 70 | f7 | 5 | |||
8 | 60 | f8 | 6 | |||
注意ID,N列的变化,就能清楚三者之间的微妙的区别了!
row_number() over() : | ||||
排序时,编号是连续的而且又时又是有序的。如图① | ||||
rank() over() : | ||||
排序时,编号是跳越式的,不是连续的,如图③ | ||||
dense_rank() over() :② | ||||
排序时,编号是连续的,但又重复。如图 |