Materi
Window function menghitung sebuah nilai untuk setiap baris dari sekumpulan baris di sekitarnya, tanpa meringkas baris-baris itu menjadi satu. Di situlah bedanya dengan GROUP BY: GROUP BY mengubah tiga puluh siswa menjadi tiga baris kelas, sedangkan window function tetap mengembalikan tiga puluh baris ditambah satu kolom hasil. Penandanya kata OVER. Di dalam kurungnya, PARTITION BY membagi baris menjadi kelompok yang dihitung terpisah, dan ORDER BY menentukan urutan di dalam setiap kelompok.
SELECT siswa, kelas, skor,
ROW_NUMBER() OVER (PARTITION BY kelas ORDER BY skor DESC) AS nomor,
RANK() OVER (PARTITION BY kelas ORDER BY skor DESC) AS peringkat,
DENSE_RANK() OVER (PARTITION BY kelas ORDER BY skor DESC) AS peringkat_rapat
FROM nilai_ujian;Ketiga fungsi itu baru berbeda ketika ada nilai kembar. ROW_NUMBER memberi 1, 2, 3, 4 tanpa peduli kembar. RANK memberi nomor yang sama kepada nilai kembar lalu melompati nomor sesudahnya: 1, 2, 2, 4. DENSE_RANK juga memberi nomor sama tetapi tidak melompat: 1, 2, 2, 3. NTILE(n) membagi baris menjadi n kelompok yang besarnya serata mungkin; bila tidak bisa rata, kelompok yang lebih besar diletakkan di depan, jadi NTILE(4) pada sepuluh siswa menghasilkan kelompok berisi 3, 3, 2, dan 2 siswa. Pada kueri ber-GROUP BY, window function membaca baris hasil pengelompokan: RANK() OVER (ORDER BY COUNT(*) DESC) memeringkat kelompoknya.