有一个表test,有a和b两个整形字段,有一些记录。
row_num
排序时遇到相同的值时,序号不同且序号是连续的
select row_number() OVER(order by a desc) as row_num , a
from test
在使用row_number实现分页时需要特别注意一点,over子句中的order by 要与Sql排序记录中的order by 保持一致,否则得到的序号可能不是连续的
rank
排序时遇到相同的值,相同值的部分序号相同,但是之后的序号会不连续,如1 2 2 2 2 5
select rank() OVER(order by a desc) as row_num , a
from test
dense_rank
排序时遇到相同的值,相同值的部分序号相同,之后的序号是连续的,如1 2 2 2 2 3
select dense_rank() OVER(order by a desc) as row_num , a
from test
ntile
排序时将记录分成指定组,组中记录序号相同,不同组序号不同且连续
如 1 1 1 2 2 2
select NTILE(2) OVER(order by a desc) as row_num , a
from test