四大排序函數 ROW_NUMBER、RANK、DENSE_RANK、NTILE 差異與範例。
CREATE TABLE test (iname VARCHAR(20), iage INT);
INSERT INTO test VALUES ('A',10),('B',20),('B',20),('C',30),('D',40);
| 函數 | 語法 | 特性 | 範例結果 (依 iname DESC) |
|---|---|---|---|
| ROW_NUMBER | ROW_NUMBER() OVER (ORDER BY iname DESC) | 唯一連續編號,不重複 | 1,2,3,4,5 |
| RANK | RANK() OVER (ORDER BY iname DESC) | 相同值同名次,名次跳號 | 1,2,2,4,5 |
| DENSE_RANK | DENSE_RANK() OVER (ORDER BY iname DESC) | 相同值同名次,名次不跳號 | 1,2,2,3,4 |
| NTILE(n) | NTILE(5) OVER (ORDER BY iname DESC) | 分成 n 組,分配組號 | 1,1,2,2,3 (5組) |
SELECT iname, iage,
ROW_NUMBER() OVER (ORDER BY iname DESC) AS rn,
RANK() OVER (ORDER BY iname DESC) AS rk,
DENSE_RANK() OVER (ORDER BY iname DESC) AS drk,
NTILE(3) OVER (ORDER BY iname DESC) AS nt
FROM test;
ROW_NUMBER:分頁、去重 (保留第一筆)。RANK:競賽排名 (並列跳號)。DENSE_RANK:薪資等級、分數等第 (不跳號)。NTILE:分位數分析 (四分位、十分位)。