三个分析函数的区分:
| ① | 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() :② | ||||
| 排序时,编号是连续的,但又重复。如图 | ||||
708

被折叠的 条评论
为什么被折叠?



