RANK & DENSE_RANK di SQL

Memberi peringkat. Nilai yang sama mendapat peringkat sama. RANK melompati nomor setelahnya, DENSE_RANK tidak.

Penjelasan sederhana

RANK dan DENSE_RANK memberi peringkat seperti klasemen lomba. Nilai yang sama mendapat peringkat yang sama.

Bedanya ada setelah posisi seri. RANK melompati nomor berikutnya, seperti lomba lari: kalau dua orang juara 2, berikutnya juara 4. DENSE_RANK tidak melompat: setelah dua juara 2, berikutnya juara 3.

Sintaks

RANK() OVER (ORDER BY kolom DESC)
DENSE_RANK() OVER (ORDER BY kolom DESC)
BagianKeterangan
RANKPeringkat dengan lompatan: 1, 2, 2, 4.
DENSE_RANKPeringkat tanpa lompatan: 1, 2, 2, 3.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh RANK & DENSE_RANK

Data contoh: karyawan

Tabel karyawan

idnamadept_idkotagajitgl_masukatasan_id
1 Andi Pratama 3 Bandung 12500000 2019-03-11 NULL
2 Bunga Lestari 1 Jakarta 9800000 2020-07-01 NULL
3 Candra Wijaya 3 Bandung 8200000 2021-02-15 1
4 Dewi Anggraini 2 Jakarta 7500000 2022-05-09 6
5 Eko Saputra 1 Jakarta 6900000 2023-01-16 2
6 Fajar Nugroho 2 Surabaya 11000000 2018-09-03 NULL
7 Gita Permata 3 Jakarta 8200000 2023-08-21 1
8 Hendra Gunawan NULL Medan 5500000 2024-04-02 NULL
query.sql
SELECT nama, gaji,
       RANK() OVER (ORDER BY gaji DESC) AS peringkat,
       DENSE_RANK() OVER (ORDER BY gaji DESC) AS peringkat_dense
FROM karyawan;
>_ Jalankan & ubah query ini di browser

Hasil 8 baris

namagajiperingkatperingkat_dense
Andi Pratama 12500000 1 1
Fajar Nugroho 11000000 2 2
Bunga Lestari 9800000 3 3
Candra Wijaya 8200000 4 4
Gita Permata 8200000 4 4
Dewi Anggraini 7500000 6 5
Eko Saputra 6900000 7 6
Hendra Gunawan 5500000 8 7

Candra dan Gita sama-sama bergaji 8,2 juta sehingga berbagi peringkat 4. Setelahnya RANK melompat ke 6, sedangkan DENSE_RANK lanjut ke 5.

Cara kerjanya, langkah demi langkah

  1. ORDER BY gaji DESC: 8 karyawan diurutkan dari gaji terbesar.
  2. Andi peringkat 1, Fajar 2, Bunga 3.
  3. Candra dan Gita sama-sama bergaji 8.200.000, jadi keduanya berbagi peringkat 4.
  4. Dewi berikutnya: RANK memberinya 6 (karena posisi 5 sudah "terpakai"), sedangkan DENSE_RANK memberinya 5.

Dipakai untuk apa di kantor?

  • Peringkat sales berdasarkan omzet.
  • Peringkat nilai peserta pelatihan.
  • Mencari 3 harga tertinggi yang berbeda dengan DENSE_RANK <= 3.

Kesalahan yang sering terjadi

  • Memakai RANK untuk mengambil "Top 3" lalu kaget hasilnya lebih dari 3 baris karena ada yang seri. Itu memang perilaku yang benar.
Progres bab Window Function 0/5 dipelajari
Lanjut: Running Total (SUM OVER)

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class