一、ROW_NUMBER()
Row_number() 在排名是序號(hào) 連續(xù) 不重復(fù),即使遇到表中的兩個(gè)一樣的數(shù)值亦是如此
select *,row_number() OVER(order by number ) as row_num
from num
數(shù)據(jù)如下:

image.png
結(jié)果如圖:

image.png
注意:在使用row_number() 實(shí)現(xiàn)分頁(yè)時(shí)需要特別注意一點(diǎn),over子句中的order by 要與SQL排序記錄中的order by保持一致,否則得到的序號(hào)可能不是連續(xù)的
select *,row_number() OVER(order by number ) as row_num
from num ORDER BY id
二、rank()
Rank() 函數(shù)會(huì)把要求排序的值相同的歸為一組且每組序號(hào)一樣,排序不會(huì)連續(xù)執(zhí)行
select *,rank() OVER(order by number ) as row_num
from num
結(jié)果如下:

image.png
三、dense_rank()
Dense_rank() 排序是連續(xù)的,也會(huì)把相同的值分為一組且每組排序號(hào)一樣
select *,dense_rank() OVER(order by number ) as row_num
from num
結(jié)果如下:

image.png
四、ntile()
Ntile(group_num) 將所有記錄分成group_num個(gè)組,每組序號(hào)一樣
select *,ntile(2) OVER(order by number ) as row_num
from num

image.png