- Pengenalan Window Functions
- Syntax Dasar & OVER Clause
- PARTITION BY — Membagi Window
- ROW_NUMBER() — Penomoran Baris
- RANK() & DENSE_RANK() — Peringkat
- LAG() & LEAD() — Akses Baris Lain
- NTILE() — Pembagian Kelompok
- Frame Clause — ROWS & RANGE
- Aggregate Functions sebagai Window
- Studi Kasus Nyata
- Quiz Pemahaman
1. Pengenalan Window Functions
Window Functions adalah salah satu fitur paling powerful dalam SQL modern. Berbeda dengan fungsi agregat biasa (seperti SUM(), COUNT()) yang mereduksi baris menjadi satu hasil, window functions melakukan perhitungan pada sekumpulan baris tanpa menggabungkannya — setiap baris tetap ada di hasil query.
Bayangkan Anda punya spreadsheet dan ingin menambah kolom "peringkat penjualan" di sebelah data penjualan. Window functions melakukan persis hal itu — menambah kolom hasil perhitungan ke setiap baris, berdasarkan "jendela" (window) data yang Anda definisikan.
Mengapa Window Functions Penting?
| Fitur | Aggregate Function | Window Function |
|---|---|---|
| Jumlah baris hasil | Dikurangi (per grup jadi 1 baris) | Tetap (semua baris dipertahankan) |
| Akses kolom lain | Hanya kolom di GROUP BY + agregat | Bisa akses kolom detail + agregat |
| Contoh penggunaan | Total penjualan per kota | Peringkat penjualan per kota, dengan detail penjualan |
| Syntax | GROUP BY | OVER (PARTITION BY ...) |
ROW_NUMBER(") OVER(ORDER BY gaji DESC") Dina Mar...
1
2
3
4
5
6
7
8
PARTITION BY departemen Each partition gets own...
/"Use Cases: Top N per group (WHERE rn=1) Paginat..."/
/"ROW_NUMBER selalu unik — tidak pernah tie. Guna..."/
ROW_NUMBER() selalu menghasilkan nomor unik (tidak pernah tie). Jika dua baris punya nilai sama, keduanya tetap dapat nomor berbeda. Urutannya tergantung database engine. Jika Anda ingin handling tie, gunakan RANK() atau DENSE_RANK().
5. RANK() & DENSE_RANK() — Peringkat
Berbeda dengan ROW_NUMBER(), RANK() dan DENSE_RANK() bisa menghasilkan peringkat yang sama untuk baris dengan nilai yang sama (tie/imbang).