Sintaks
ROW_NUMBER() OVER (PARTITION BY kelompok ORDER BY kolom)
| Bagian | Keterangan |
|---|---|
ORDER BY | Wajib. Menentukan siapa nomor 1. |
PARTITION BY | Opsional. 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
| id | tanggal | karyawan_id | produk | kategori | qty | harga |
|---|---|---|---|---|---|---|
| 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 |
SELECT kategori, produk, qty * harga AS omzet,
ROW_NUMBER() OVER (
PARTITION BY kategori ORDER BY qty * harga DESC
) AS urutan
FROM penjualan;
Hasil 10 baris
| kategori | produk | omzet | urutan |
|---|---|---|---|
| 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.