Anda hanya akan melihat perbedaannya jika Anda memiliki ikatan dalam partisi untuk nilai pemesanan tertentu.
RANK
dan DENSE_RANK
deterministik dalam hal ini, semua baris dengan nilai yang sama untuk kolom pengurutan dan partisi akan mendapatkan hasil yang sama, sedangkan ROW_NUMBER
akan secara sewenang-wenang (non deterministik) memberikan hasil yang bertambah ke baris yang diikat.
Contoh: (Semua baris memiliki StyleID
yang sama begitu juga di partisi yang sama dan di dalam partisi itu 3 baris pertama diikat ketika dipesan oleh ID
)
WITH T(StyleID, ID)
AS (SELECT 1,1 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,2)
SELECT *,
RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'RANK',
ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) AS 'ROW_NUMBER',
DENSE_RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'DENSE_RANK'
FROM T
Kembali
StyleID ID RANK ROW_NUMBER DENSE_RANK
----------- -------- --------- --------------- ----------
1 1 1 1 1
1 1 1 2 1
1 1 1 3 1
1 2 4 4 2
Anda dapat melihat bahwa untuk tiga baris identik ROW_NUMBER
peningkatan, RANK
nilainya tetap sama kemudian melompat ke 4
. DENSE_RANK
juga memberikan peringkat yang sama untuk ketiga baris tetapi kemudian nilai berbeda berikutnya diberi nilai 2.