Pelajaran modul (3/4)
Peringkat: ROW_NUMBER, RANK, dan DENSE_RANK
Peringkat: ROW_NUMBER, RANK, dan DENSE_RANK
Selain agregasi, fungsi jendela juga unggul dalam pengurutan dan pemeringkatan. Ada fungsi yang dirancang khusus untuk bekerja di dalam jendela (OVER() menjadi wajib) yang menetapkan nomor urut atau posisi peringkat.
Untuk membuatnya bekerja berdasarkan kriteria, kita harus menggunakan klausa ORDER BY di dalam OVER().
Trio peringkat
ROW_NUMBER(): Menetapkan nomor urut biasa (1, 2, 3...) ke setiap baris, memutus ikatan secara sewenang-wenang.RANK(): Menghasilkan efek "Olimpiade": 1, 2, 2, 4. Meninggalkan celah ("3" dilewati) dan memberikan peringkat yang sama jika terjadi seri.DENSE_RANK(): Memperkuat peringkat: 1, 2, 2, 3. Tidak pernah ada celah setelah seri.
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;Dengan menggabungkan PARTITION BY dan ORDER BY bersama-sama di dalam OVER() kita bisa mendapatkan "3 teratas untuk setiap kategori"!
Ekstrak 'nama_depan', 'nama_belakang' dan 'id' dari tabel pelanggan ('pelanggan') (anggap 'id' adalah nomor pengenal). Tambahkan kolom 'peringkat' menggunakan DENSE_RANK() berdasarkan 'id' secara menurun (dari tertinggi ke terendah).
Tunjukkan petunjuk
DENSE_RANK() LEBIH(ORDER OLEH id DESC).
Solusi tersedia setelah 3 upaya
Buat peringkat untuk setiap 'category_id' berdasarkan harga produk ('products'). Ekstrak 'category_id', 'id', 'price' dan tambahkan 'price_rank' menggunakan ROW_NUMBER() dalam urutan 'price', partisi berdasarkan 'category_id'.
Tunjukkan petunjuk
Gabungkan PARTITION BY kategori_id ORDER BY price DESC di dalam OVER.
Solusi tersedia setelah 3 upaya