Semua fungsi window SQL yang umum beserta klausa yang mengendalikannya, dikelompokkan per tugas: memberi peringkat pada baris, mengintip tetangga, menjalankan total lintas frame, dan mengambil nilai pertama atau terakhir. Setiap baris memasangkan fungsi dengan contoh satu baris.
Fungsi window menghitung hasil lintas baris yang berhubungan dengan baris saat ini, tanpa meringkasnya seperti yang dilakukan GROUP BY. Setiap fungsi window diakhiri klausa OVER yang mendefinisikan window: PARTITION BY mengelompokkan baris, ORDER BY mengurutkannya, dan frame opsional membatasi himpunan yang bergeser. Kuasai OVER, sisanya hanya kosakata.
Tabel referensi · 27 entri
Fungsi Window SQLExplained
27 of 27 rows
Peringkat
Bilangan bulat berurutan yang unik untuk tiap baris dalam window.
ROW_NUMBER() OVER (ORDER BY total DESC)
Peringkat dengan celah; nilai seri berbagi peringkat dan melewati nomor berikutnya.
RANK() OVER (ORDER BY total DESC)
Peringkat tanpa celah; nilai seri berbagi peringkat dan tidak ada yang dilewati.
DENSE_RANK() OVER (ORDER BY total DESC)
Membagi window terurut menjadi n wadah yang kira-kira sama besar.
NTILE(4) OVER (ORDER BY total DESC)
Mengintip tetangga
Nilai dari n baris sebelumnya; default menggantikannya bila baris itu tidak ada.
LAG(total, 1, 0) OVER (ORDER BY created_at)
Nilai dari n baris berikutnya; default menggantikannya bila baris itu tidak ada.
LEAD(total, 1, 0) OVER (ORDER BY created_at)
Agregasi lintas window
Total berjalan atau per partisi tanpa meringkas baris.
SUM(total) OVER (ORDER BY created_at)
Rata-rata berjalan atau per partisi.
AVG(total) OVER (PARTITION BY user_id)
Jumlah baris berjalan atau per partisi.
COUNT(*) OVER (PARTITION BY user_id)
Nilai terendah di seluruh window atau partisi.
MIN(total) OVER (PARTITION BY user_id)
Nilai tertinggi di seluruh window atau partisi.
MAX(total) OVER (PARTITION BY user_id)
SUM dengan ORDER BY dan frame terbuka di awal; tiap baris menjumlahkan semuanya hingga dirinya sendiri.
SUM(total) OVER (ORDER BY created_at ROWS UNBOUNDED PRECEDING)
AVG atas frame n baris sebelum dan sesudah baris saat ini.
AVG(total) OVER (ORDER BY created_at ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
Pertama, terakhir, dan persentil
Nilai pertama dalam pengurutan window.
FIRST_VALUE(total) OVER (ORDER BY total DESC)
Nilai terakhir dalam frame; tanpa UNBOUNDED FOLLOWING frame berhenti di baris saat ini.
LAST_VALUE(total) OVER (ORDER BY total ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
Nilai pada baris ke-n dari pengurutan window.
NTH_VALUE(total, 2) OVER (ORDER BY total DESC)
Peringkat relatif sebuah baris, dari 0 sampai 1.
PERCENT_RANK() OVER (ORDER BY total)
Porsi baris pada atau sebelum baris saat ini, dari 1/n hingga 1.
CUME_DIST() OVER (ORDER BY total)
Klausa OVER
Mendefinisikan window yang dibaca setiap fungsi.
<fn>() OVER (PARTITION BY user_id ORDER BY created_at)
Memulai ulang window untuk setiap kelompok baris.
PARTITION BY user_id
Mengurutkan baris di dalam setiap partisi.
ORDER BY created_at
Membatasi frame yang bergeser, mis. dari baris sebelumnya hingga baris berikutnya.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
Membatasi frame berdasarkan nilai, bukan posisi baris; CURRENT ROW memuat baris yang seri, dan ini adalah frame default di bawah ORDER BY.
RANGE BETWEEN 100 PRECEDING AND CURRENT ROW
Membatasi frame berdasarkan kelompok baris seri dari ORDER BY.
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
Menghapus baris saat ini dari frame; EXCLUDE TIES menghapus baris yang serinya saja.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW
Memberi nama window sekali per kueri agar beberapa klausa OVER dapat menggunakannya kembali.
WINDOW w AS (PARTITION BY user_id ORDER BY created_at)
Mempersempit baris yang dibaca agregat window, sebelum window diterapkan.
SUM(total) FILTER (WHERE status = 'paid') OVER (ORDER BY created_at)