Masalah:
Anda ingin menambahkan posisi peringkat ke baris secara berurutan, meskipun baris memiliki nilai yang sama.
Contoh:
Basis data kami memiliki tabel bernama competition
dengan data pada kolom berikut:id
(kunci utama), first_name
, last_name
, dan score
.
id | nama_depan | nama_belakang | skor |
11 | John | Thomas | 345 |
14 | Maria | Johnson | 222 |
16 | Lisa | Coklat | 154 |
23 | Alan | Blake | 222 |
32 | Kris | Taylor | 154 |
Mari tampilkan semua detail tentang siswa:nama belakang, nama depan, dan skor mereka diurutkan berdasarkan score
dalam urutan menurun. Kami tidak ingin melewatkan nomor posisi jika beberapa skor sama untuk lebih dari satu siswa.
Solusi 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Perhatikan bahwa peringkat berkisar dari 1 hingga 3.
Diskusi:
Gunakan DENSE_RANK
jika Anda tidak ingin melewatkan posisi peringkat demi baris dengan peringkat yang sama. Dalam contoh kita, meskipun Mary dan Alan memiliki peringkat 2 yang sama, posisi Lisa adalah 3.