Window

DENSE_RANK

PostgreSQLPostgreSQL

Memberikan ranking tanpa gap. Berbeda dengan RANK yang membuat gap setelah nilai sama, DENSE_RANK melanjutkan dengan angka berikutnya. Berguna untuk top-N queries.

Tipe hasil: bigint

Syntax

SQL
DENSE_RANK() OVER (
  [PARTITION BY partition_expression]
  ORDER BY sort_expression [ASC|DESC]
)

Parameter

ORDER BYexpressionwajib

Menentukan urutan ranking

PARTITION BYexpressionopsional

Membagi data menjadi grup untuk ranking terpisah

Contoh Penggunaan

Perbedaan RANK vs DENSE_RANK

SQL
1SELECT
2 name,
3 score,
4 RANK() OVER (ORDER BY score DESC) AS rank,
5 DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
6FROM students;

RANK memberi gap, DENSE_RANK tidak.

Hasil
namescorerankdense_rank
Andi10011
Budi10011
Citra9032
Dewi8543

Top 3 per Kategori

SQL
1SELECT *
2FROM (
3 SELECT
4 category,
5 product_name,
6 sales,
7 DENSE_RANK() OVER (PARTITION BY category ORDER BY sales DESC) AS rank
8 FROM products
9) ranked
10WHERE rank <= 3;

Mengambil 3 produk terlaris per kategori.

Hasil
categoryproduct_namesalesrank
ElectronicsLaptop10001
ElectronicsPhone8002
ElectronicsTablet6003

Ranking Nilai Unik

SQL
1SELECT DISTINCT
2 salary,
3 DENSE_RANK() OVER (ORDER BY salary DESC) AS salary_tier
4FROM employees;

Membuat tier gaji tanpa gap.