ROW_NUMBER di SQL

Memberi nomor urut 1, 2, 3, ... untuk setiap baris, bisa diulang dari 1 di tiap kelompok.

Penjelasan sederhana

ROW_NUMBER memberi nomor urut 1, 2, 3, dan seterusnya untuk setiap baris, sesuai urutan yang kamu tentukan di ORDER BY.

Dengan PARTITION BY, penomoran diulang dari 1 di setiap kelompok. Ini cara paling umum untuk mencari "juara" di setiap kelompok, misalnya transaksi terbesar per kategori, atau untuk menandai data duplikat.

Sintaks

ROW_NUMBER() OVER (PARTITION BY kelompok ORDER BY kolom)
BagianKeterangan
ORDER BYWajib. Menentukan siapa nomor 1.
PARTITION BYOpsional. Nomor diulang dari 1 di tiap kelompok.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh ROW_NUMBER

Data contoh: penjualan

Tabel penjualan

idtanggalkaryawan_idprodukkategoriqtyharga
1 2026-01-05 4 Laptop Elektronik 2 8500000
2 2026-01-12 6 Printer Elektronik 1 2300000
3 2026-01-20 4 Kursi Kantor Furnitur 5 1200000
4 2026-02-03 6 Laptop Elektronik 1 8500000
5 2026-02-14 4 Meja Kerja Furnitur 3 1750000
6 2026-02-25 5 Kertas A4 ATK 20 55000
7 2026-03-02 6 Kursi Kantor Furnitur 4 1200000
8 2026-03-10 4 Printer Elektronik 2 2300000
9 2026-03-18 5 Kertas A4 ATK 30 55000
10 2026-03-27 6 Monitor Elektronik 3 1900000
query.sql
SELECT kategori, produk, qty * harga AS omzet,
       ROW_NUMBER() OVER (
         PARTITION BY kategori ORDER BY qty * harga DESC
       ) AS urutan
FROM penjualan;
>_ Jalankan & ubah query ini di browser

Hasil 10 baris

kategoriprodukomzeturutan
ATK Kertas A4 1650000 1
ATK Kertas A4 1100000 2
Elektronik Laptop 17000000 1
Elektronik Laptop 8500000 2
Elektronik Monitor 5700000 3
Elektronik Printer 4600000 4
Elektronik Printer 2300000 5
Furnitur Kursi Kantor 6000000 1
Furnitur Meja Kerja 5250000 2
Furnitur Kursi Kantor 4800000 3

Transaksi terbesar di tiap kategori mendapat nomor 1.

Cara kerjanya, langkah demi langkah

  1. FROM penjualan: 10 transaksi diambil.
  2. PARTITION BY kategori: transaksi dibagi ke 3 kelompok kategori.
  3. ORDER BY qty * harga DESC: di setiap kelompok, transaksi diurutkan dari nilai terbesar.
  4. Nomor diberikan mulai dari 1. Di Elektronik, laptop 17.000.000 mendapat nomor 1. Di ATK, Kertas A4 senilai 1.650.000 mendapat nomor 1.

Dipakai untuk apa di kantor?

  • Mengambil transaksi terakhir setiap pelanggan.
  • Mencari 3 produk terlaris di setiap kategori.
  • Menghapus data duplikat dengan menyisakan baris bernomor 1.

Kesalahan yang sering terjadi

  • Lupa ORDER BY di dalam OVER. Penomorannya menjadi acak.
  • Mengira dua nilai yang sama akan mendapat nomor sama. ROW_NUMBER selalu memberi nomor berbeda; untuk peringkat seri pakai RANK.
Progres bab Window Function 0/5 dipelajari
Lanjut: RANK & DENSE_RANK

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class