SELECT COUNT(*) AS Rank, a1.au_lname, a1.au_fname
FROM authors a1, authors a2
WHERE a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname
GROUP BY a1.au_lname, a1.au_fname
ORDER BY Rank
缺點:O(N^2) 複雜度,相同值產生並列排名 (如 1,2,2,4 缺 3)。
SELECT IDENTITY(INT, 1, 1) AS Rank, au_lname, au_fname
INTO #tmp
FROM authors
ORDER BY au_lname, au_fname
SELECT * FROM #tmp
DROP TABLE #tmp
優點:線性掃描、無並列排名問題、可直接套用分頁 (WHERE Rank BETWEEN 11 AND 20)。
SELECT ROW_NUMBER() OVER (ORDER BY au_lname, au_fname) AS Rank, au_lname, au_fname
FROM authors
RANK() / DENSE_RANK()。應用層 (前端/中間層) 加流水號最簡單且不佔資料庫資源;必須在 SQL 層時,優先用窗口函數,其次暫存表法,避免自聯結法。