Nomor peringkat, selisih antar baris, dan total berjalan tidak bisa dijawab agregat biasa. Window function membuka jendela perhitungan yang melintasi banyak baris sekaligus tetap menampilkan tiap barisnya. Section ini menguji satu per satu fungsi jendela MySQL.
Bedah konsep window function di MySQL: perbedaan agregat biasa yang merangkum N baris menjadi satu baris dengan window function yang menjaga setiap baris tetap tampil namun membawa konteks lintas baris, bentuk paling sederhana OVER(), anatomi sintaks fungsi OVER, serta daftar kebutuhan analisis yang paling cocok diselesaikan window function.
Buka → # OVER dan PARTITION BYBedah klausa OVER dan PARTITION BY pada window function MySQL: membagi jendela per kelompok tanpa meruntuhkan baris, partisi multi kolom, peran ORDER BY di dalam jendela untuk fungsi ranking, kombinasi PARTITION BY dan ORDER BY, serta perbandingan langsung dengan GROUP BY.
Buka → # ROW_NUMBERBedah fungsi ROW_NUMBER di MySQL: nomor urut 1 sampai n untuk seluruh hasil maupun per kelompok dengan PARTITION BY, pola top-N per grup memakai CTE dan subquery, deduplikasi baris dengan nomor 1, serta perbedaan penomoran query dengan AUTO_INCREMENT.
Buka → # RANK dan DENSE_RANKPerbandingan RANK, DENSE_RANK, dan ROW_NUMBER pada data dengan nilai seri: RANK meninggalkan celah setelah nilai yang sama, DENSE_RANK merapatkan celah, ROW_NUMBER selalu unik — lengkap dengan use case peringkat juara, filter tiga besar, dan peringkat teratas per grup.
Buka → # LAG dan LEADBedah fungsi LAG dan LEAD di MySQL: mengambil nilai baris sebelum dan sesudah baris saat ini, menghitung selisih pertumbuhan hari ke hari, mengelola NULL di tepi jendela dengan argumen default, offset lebih dari satu, serta PARTITION BY yang mencegah nilai bocor antar kelompok kota.
Buka → # Running TotalMembangun akumulasi berjalan dengan SUM OVER (ORDER BY ...) di MySQL: total yang tumbuh baris demi baris, perbedaan perilaku saat ORDER BY dihilangkan sehingga seluruh jendela terlihat dari tiap baris, reset akumulasi per partisi kota, bentuk eksplisit ROWS UNBOUNDED PRECEDING, serta penerapan saldo rekening tabungan dari mutasi harian.
Buka → # Moving AverageMembangun moving average dengan AVG OVER dan frame ROWS BETWEEN 2 PRECEDING AND CURRENT ROW di MySQL: rata-rata bergerak tiga periode per baris, penghalusan tren dari data zigzag harian, jendela bergerak per kota dengan PARTITION BY, perbandingan lebar jendela dua dan tiga periode, serta perilaku desimal deterministik AVG.
Buka → # Window FrameBedah window frame di MySQL: perbedaan ROWS yang menghitung baris fisik dengan RANGE yang menghitung nilai logis dan memperlakukan baris sekembar sebagai peers, bukti nyata lewat ORDER BY dengan nilai duplikat, RANGE bersatuan nilai, keluarga bentuk BETWEEN UNBOUNDED PRECEDING hingga FOLLOWING, frame di dalam partisi, frame default RANGE, serta status EXCLUDE di MySQL 8.4.
Buka →