SQL SERVER 排序函式ROW_NUMBER、RANK、DENSE_RANK、NTILE

景上發表於2016-05-23

1、ROW_NUMBER()函式:根據f_id升序排序(ASC)後的記錄,為每條記錄增添遞增的順序數值序號(1、2、3……),即使f_id的值相同也遞增;

SELECT ROW_NUMBER() OVER (ORDER BY f_name ASC) AS ROWID,f_name,f_id FROM fruits;
SELECT ROW_NUMBER() OVER (ORDER BY CASE WHEN f_name IS NULL THEN 2 ELSE 1 END ASC) AS ROWID,f_name,f_id FROM fruits;--f_name為NULL值時排到後面;

這裡寫圖片描述

2、RANK()函式:與ROW_NUMBER()不同的是,f_id值相同,對應的順序數值也相同(比如,如果三人的分數相同,則他們三並列第一,而第四位的排名則是第四);

SELECT RANK() OVER (ORDER BY f_name ASC) AS ROWID,f_name,f_id FROM fruits;

這裡寫圖片描述

3、DENSE_RANK()函式:與ROW_NUMBER()不同的是,f_id值相同數值序號也相同,接下來繼續遞增;

SELECT DENSE_RANK() OVER (ORDER BY f_name ASC) AS DENSEID,f_name,f_id FROM fruits;

這裡寫圖片描述

4、NTILE()函式:將記錄分成指定的組數;

SELECT NTILE(3) OVER (ORDER BY f_name ASC) AS DENSEID,f_name,f_id FROM fruits;
SELECT NTILE(4) OVER (ORDER BY f_name ASC) AS DENSEID,f_name,f_id FROM fruits;
SELECT NTILE(6) OVER (ORDER BY f_name ASC) AS DENSEID,f_name,f_id FROM fruits;

這裡寫圖片描述

相關文章