0Pricing
SQL Academy · Pelajaran

ROW_NUMBER, RANK, DENSE_RANK

Beri nomor dan peringkat pada baris dalam partisi, lalu pilih fungsi peringkat yang tepat saat terjadi nilai sama.

ROW_NUMBER, RANK, DENSE_RANK adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Tiga Fungsi Penomoran

Tiga fungsi jendela yang memberi nomor pada baris dalam sebuah partisi:

  • ROW_NUMBER() — 1, 2, 3, 4 (selalu unik)
  • RANK() — 1, 2, 2, 4 (nilai yang sama berbagi peringkat, lalu ada lompatan)
  • DENSE_RANK() — 1, 2, 2, 3 (nilai yang sama berbagi peringkat, tanpa lompatan)

ROW_NUMBER

Memberikan nomor 1, 2, 3 dalam setiap partisi. Nilai yang sama diputuskan secara arbitrer — berikan penentu pemutus nilai sama dalam ORDER BY agar hasilnya deterministik:

SELECT id, user_id, total,
       ROW_NUMBER() OVER (
         PARTITION BY user_id ORDER BY total DESC, id
       ) AS rn
FROM orders;

N Teratas per Grup

Penggunaan klasik ROW_NUMBER:

WITH ranked AS (
  SELECT *,
         ROW_NUMBER() OVER (
           PARTITION BY user_id ORDER BY total DESC
         ) AS rn
  FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;
-- Each user's top 3 orders.

RANK

Baris dengan nilai ORDER BY yang sama mendapatkan peringkat yang sama; nilai berbeda berikutnya melewati celah tersebut:

-- totals: 100, 90, 90, 70
-- RANK:    1,   2,  2,  4    (skipped 3)
SELECT id, total,
       RANK() OVER (ORDER BY total DESC) AS rk
FROM orders;

DENSE_RANK

Sama seperti RANK, tetapi tanpa celah:

-- totals: 100, 90, 90, 70
-- DENSE:   1,   2,  2,  3
SELECT id, total,
       DENSE_RANK() OVER (ORDER BY total DESC) AS dr
FROM orders;

Memilih di Antara Ketiganya

  • Memerlukan nomor unik (misalnya untuk paginasi)? ROW_NUMBER
  • Memerlukan pemeringkatan dengan "nilai sama dilewati" secara tradisional? RANK
  • Memerlukan pemeringkatan dengan "nilai sama berbagi peringkat, berikutnya adalah peringkat berikutnya"? DENSE_RANK

NTILE: Kelompok Kuantil-N

NTILE(n) membagi baris ke dalam n kelompok yang kurang lebih sama:

SELECT id, total,
       NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 4 = top 25%

Menghapus Baris Duplikat

Gunakan ROW_NUMBER + DELETE untuk menyimpan satu baris per grup duplikat:

WITH dups AS (
  SELECT id,
         ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
  FROM users
)
DELETE FROM users WHERE id IN (SELECT id FROM dups WHERE rn > 1);

Paginasi per Grup

Halaman 2 dari "pesanan setiap pengguna, 5 per halaman":

WITH r AS (
  SELECT id, user_id,
         ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn
  FROM orders
)
SELECT * FROM r WHERE rn BETWEEN 6 AND 10;

PERCENT_RANK dan CUME_DIST

Posisi relatif dalam partisi:

SELECT id, total,
       PERCENT_RANK() OVER (ORDER BY total) AS pct_rank,
       CUME_DIST()    OVER (ORDER BY total) AS cume_dist
FROM orders;

Kinerja

Fungsi penomoran memerlukan input yang diurutkan dalam setiap partisi. Indeks pada (partition_col, order_col) dapat menghindari langkah pengurutan.

Ringkasan

Tiga fungsi penomoran mencakup sebagian besar kebutuhan.

  • ROW_NUMBER untuk keunikan
  • RANK / DENSE_RANK untuk pemeringkatan dengan nilai sama
  • NTILE untuk kelompok kuantil

Pemeriksaan Singkat

Diberikan total 100, 90, 90, 70, keluaran apa yang dihasilkan oleh DENSE_RANK?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “ROW_NUMBER, RANK, DENSE_RANK” gratis?

Ya — teks lengkap “ROW_NUMBER, RANK, DENSE_RANK” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “ROW_NUMBER, RANK, DENSE_RANK”?

Beri nomor dan peringkat pada baris dalam partisi, lalu pilih fungsi peringkat yang tepat saat terjadi nilai sama. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “ROW_NUMBER, RANK, DENSE_RANK” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD, dan Pola Deret Waktu
  4. Total Berjalan dan Rata-Rata Bergerak
← Kembali ke SQL Academy