Window
PostgreSQL
ROW_NUMBER
Memberikan nomor urut unik untuk setiap baris dalam partition, dimulai dari 1. Nomor tidak pernah duplikat dalam satu partition.
Tipe hasil:
bigintSyntax
SQL
ROW_NUMBER() OVER ([PARTITION BY partition_expression] ORDER BY sort_expression)Parameter
ORDER BYclausewajib
Menentukan urutan penomoran dalam partition
PARTITION BYclauseopsional
Opsional. Membagi hasil ke dalam partition terpisah
Contoh Penggunaan
Penomoran Sederhana
SQL
1 SELECT 2 ROW_NUMBER() OVER (ORDER BY created_at DESC) as row_num, 3 name, 4 created_at 5 FROM products;
Memberikan nomor urut berdasarkan tanggal terbaru.
Hasil
| row_num | name | created_at |
|---|---|---|
| 1 | iPhone 15 | 2024-03-15 |
| 2 | MacBook Pro | 2024-03-10 |
| 3 | AirPods | 2024-03-05 |
Top 3 per Kategori
SQL
1 WITH ranked_products AS ( 2 SELECT 3 category, 4 name, 5 price, 6 ROW_NUMBER() OVER ( 7 PARTITION BY category 8 ORDER BY price DESC 9 ) as rank 10 FROM products 11 ) 12 SELECT * FROM ranked_products WHERE rank <= 3;
Mengambil 3 produk termahal per kategori menggunakan ROW_NUMBER dengan PARTITION BY.
Hasil
| category | name | price | rank |
|---|---|---|---|
| Electronics | MacBook Pro | 2500000 | 1 |
| Electronics | iPhone 15 | 1500000 | 2 |
| Electronics | AirPods | 350000 | 3 |
| Clothing | Jacket | 500000 | 1 |
| ... 2 baris lainnya | |||
Pagination dengan ROW_NUMBER
SQL
1 SELECT * 2 FROM ( 3 SELECT 4 ROW_NUMBER() OVER (ORDER BY id) as row_num, 5 * 6 FROM products 7 ) numbered 8 WHERE row_num BETWEEN 21 AND 40; -- Page 2, 20 items per page
Implementasi pagination menggunakan ROW_NUMBER.