Masalah:
Anda ingin membuat peringkat rekor dengan melewatkan posisi peringkat setelah baris yang memiliki peringkat yang sama.
Contoh:
Basis data kami memiliki tabel bernama championship
dengan data pada kolom berikut:id
(kunci utama), user_name
, dan score
.
id | nama_pengguna | skor |
111 | John | 12 |
112 | Maria | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Kris | 23 |
Mari kita tampilkan semua nama pengguna dan skor mereka diurutkan dalam urutan menurun dan diberi peringkat berdasarkan skor.
Solusi 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Kueri ini mengembalikan peringkat berikut:
rank_place | nama_pengguna | skor |
1 | Lisa | 45 |
2 | Maria | 23 |
2 | Alan | 23 |
2 | Kris | 23 |
5 | John | 12 |
Perhatikan bahwa nomor peringkat adalah dari 1 hingga 5, diurutkan berdasarkan skor dalam urutan menurun.
Diskusi:
Gunakan RANK
jika Anda ingin melewati posisi peringkat setelah baris dengan peringkat yang sama. Dalam contoh kita, Mary, Alan, dan Chris semuanya memiliki peringkat yang sama 2. Posisi yang memenuhi syarat berikutnya adalah 5 (dihitung dari 2 + 3 baris dengan peringkat yang sama).