Masalah:
Di kumpulan hasil, Anda ingin mempartisi record dan memberi peringkat baris dalam setiap partisi, menambahkan kolom lain untuk menampilkan peringkat baris dalam partisi.
Contoh:
Basis data kami memiliki tabel bernama majalah dengan data di kolom berikut:id
(kunci utama), name
, category
, dan price
.
id | nama | kategori | harga |
---|---|---|---|
105 | Hidup Pedesaan | gaya hidup | 1,70 |
108 | Majalah Berita | berita | 3,35 |
115 | Desibel | musik | 6,50 |
123 | Majalah Drum | musik | 6,50 |
145 | Matahari terbenam | gaya hidup | 12.00 |
155 | Dunia | gaya hidup | 9,50 |
158 | Keyboard | musik | 8.45 |
Ayo kelompokkan majalah menurut kategori dan urutkan setiap grup dalam urutan menurun berdasarkan harga . Menampilkan posisi peringkat, nama, kategori, dan harga untuk setiap majalah.
Solusi:
SELECT category, name, price, RANK() OVER (PARTITION BY category ORDER BY price DESC ) AS price_rank FROM magazine;
Ini hasilnya:
kategori | nama | harga | peringkat_harga |
---|---|---|---|
gaya hidup | Matahari terbenam | 12.00 | 1 |
gaya hidup | Dunia | 9,50 | 2 |
gaya hidup | Hidup Pedesaan | 1,70 | 3 |
musik | Keyboard | 8.45 | 1 |
musik | Desibel | 6,50 | 2 |
musik | Majalah Drum | 6,50 | 2 |
berita | Majalah Berita | 3,35 | 1 |
Diskusi:
Untuk mempartisi baris dan memberi peringkat berdasarkan posisinya di dalam partisi, gunakan fungsi RANK() dengan klausa PARTITION BY.
Fungsi RANK() SQL memungkinkan kita untuk menambahkan posisi record di dalam kumpulan hasil atau di dalam setiap partisi. Dalam contoh kami, kami memberi peringkat baris dalam sebuah partisi.
Klausa OVER() selalu muncul setelah RANK(). OVER() harus berisi klausa ORDER BY. Jika Anda mengembalikan peringkat dalam sebuah partisi, tempatkan klausa PARTITION BY di dalam klausa OVER(). PARTITION BY diikuti oleh ekspresi atau nama kolom; dalam contoh kita, kita menggunakan kolom category
(PARTITION BY category
).
Catatan: Jika Anda tidak menggunakan partisi, Anda dapat menghilangkan PARTITION BY dan cukup memasukkan klausa ORDER BY di OVER().
Setelah PARTITION BY, letakkan ORDER BY diikuti dengan nama kolom atau ekspresi pengurutan. Dalam contoh kami, kami mengurutkan dalam urutan menurun menurut kolom price
(ORDER BY price DESC
). Kata kunci DESC menunjukkan urutan pengurutan menurun.
Dalam contoh di atas, menggunakan RANK() dengan PARTITION BY membagi hasil yang disetel ke dalam grup majalah yang terpisah menurut kategori mereka . Dengan setiap grup, baris diurutkan berdasarkan harga dan kemudian diberi peringkat dalam grup itu.