Lompati ke konten utama
Modul 13 · Pelajaran 3 dari 451/57 dalam kursus~15 min
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

  1. ROW_NUMBER(): Menetapkan nomor urut biasa (1, 2, 3...) ke setiap baris, memutus ikatan secara sewenang-wenang.
  2. RANK(): Menghasilkan efek "Olimpiade": 1, 2, 2, 4. Meninggalkan celah ("3" dilewati) dan memberikan peringkat yang sama jika terjadi seri.
  3. DENSE_RANK(): Memperkuat peringkat: 1, 2, 2, 3. Tidak pernah ada celah setelah seri.
SQL
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"!

Latihan#sql.m13.l3.e1
Upaya: 0Memuat…

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).

Memuat editor…
Tunjukkan petunjuk

DENSE_RANK() LEBIH(ORDER OLEH id DESC).

Solusi tersedia setelah 3 upaya

Latihan#sql.m13.l3.e2
Upaya: 0Memuat…

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'.

Memuat editor…
Tunjukkan petunjuk

Gabungkan PARTITION BY kategori_id ORDER BY price DESC di dalam OVER.

Solusi tersedia setelah 3 upaya