Window
PostgreSQL
RANK
Memberikan ranking untuk setiap baris. Baris dengan nilai sama mendapat rank yang sama, dengan gap setelahnya.
Tipe hasil:
bigintSyntax
SQL
RANK() OVER ([PARTITION BY partition_expression] ORDER BY sort_expression)Parameter
ORDER BYclausewajib
Menentukan urutan ranking dalam partition
PARTITION BYclauseopsional
Opsional. Membagi hasil ke dalam partition terpisah
Contoh Penggunaan
Ranking Berdasarkan Score
SQL
1 SELECT 2 RANK() OVER (ORDER BY score DESC) as rank, 3 name, 4 score 5 FROM students;
Memberikan ranking berdasarkan score. Jika ada nilai sama, rankingnya sama.
Hasil
| rank | name | score |
|---|---|---|
| 1 | Alice | 95 |
| 1 | Bob | 95 |
| 3 | Carol | 90 |
| 4 | David | 85 |
Perbandingan RANK vs DENSE_RANK vs ROW_NUMBER
SQL
1 SELECT 2 score, 3 RANK() OVER (ORDER BY score DESC) as rank, 4 DENSE_RANK() OVER (ORDER BY score DESC) as dense_rank, 5 ROW_NUMBER() OVER (ORDER BY score DESC) as row_num 6 FROM students;
Perhatikan perbedaan: RANK melompat, DENSE_RANK tidak, ROW_NUMBER selalu unik.
Hasil
| score | rank | dense_rank | row_num |
|---|---|---|---|
| 95 | 1 | 1 | 1 |
| 95 | 1 | 1 | 2 |
| 90 | 3 | 2 | 3 |
| 85 | 4 | 3 | 4 |