Memberikan ranking tanpa gap. Berbeda dengan RANK yang membuat gap setelah nilai sama, DENSE_RANK melanjutkan dengan angka berikutnya. Berguna untuk top-N queries.
bigintDiperbarui: 12 Jul 2026DENSE_RANK() OVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC|DESC]
)Menentukan urutan ranking
Membagi data menjadi grup untuk ranking terpisah
1 SELECT 2 name, 3 score, 4 RANK() OVER (ORDER BY score DESC) AS rank, 5 DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank 6 FROM students;
RANK memberi gap, DENSE_RANK tidak.
| name | score | rank | dense_rank |
|---|---|---|---|
| Andi | 100 | 1 | 1 |
| Budi | 100 | 1 | 1 |
| Citra | 90 | 3 | 2 |
| Dewi | 85 | 4 | 3 |
1 SELECT * 2 FROM ( 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 10 WHERE rank <= 3;
Mengambil 3 produk terlaris per kategori.
| category | product_name | sales | rank |
|---|---|---|---|
| Electronics | Laptop | 1000 | 1 |
| Electronics | Phone | 800 | 2 |
| Electronics | Tablet | 600 | 3 |
1 SELECT DISTINCT 2 salary, 3 DENSE_RANK() OVER (ORDER BY salary DESC) AS salary_tier 4 FROM employees;
Membuat tier gaji tanpa gap.
Sudah paham DENSE_RANK? Latih langsung di browser
Latihan interaktif, langsung di browser.
PERCENT_RANK