25 November 2014

ROW_NUMBER, RANK DAN DENSE_RANK

Sejak versi 2005, SQL Server menyediakan 3 macam fungsi yang bisa men-generate row number dari result set query yang kita hasilkan. Berikut ketiga macam fungsi tsb dan perbedaannya :

  1. ROW_NUMBER() : men-generate row number unik dari setiap row yang dihasilkan, tanpa melihat apakah row tsb duplicate atau tidak.
  2. RANK() : men-generate row number unik untuk setiap row unik (non-duplicate) yang dihasilkan dengan meninggalkan gap diantaranya.
  3. DENSE_RANK() : men-generate row number unik untuk setiap row unik (non-duplicate) yang dihasilkan tanpa meninggalkan gap diantaranya.
Untuk lebih jelasnya, silakan copas contoh berikut ke SQL Management Studio :

DECLARE @t TABLE(Alpha VARCHAR(1))

INSERT INTO @t
SELECT 'a' UNION ALL
SELECT 'a' UNION ALL
SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
SELECT 'c' UNION ALL
SELECT 'd' UNION ALL
SELECT 'e'

SELECT    Alpha,
        ROW_NUMBER() OVER (ORDER BY Alpha) AS Row_Numbers,
        RANK() OVER (ORDER BY Alpha) AS Ranks,
        DENSE_RANK() OVER (ORDER BY Alpha) AS Dense_Ranks
FROM @t

Dan berikut output yang dihasilkan :

Demikian, semoga bermanfaat.