Semua fungsi tetingkap SQL yang biasa serta klausa yang mengawalnya, disusun mengikut tugas: menyusun pangkat baris, mengintip jiran, menjalankan jumlah merentasi bingkai, dan mengambil nilai pertama atau terakhir. Setiap baris memadankan fungsi dengan contoh satu baris.
Fungsi tetingkap mengira hasil merentasi baris yang berkaitan dengan baris semasa, tanpa merungkaskannya seperti yang dilakukan GROUP BY. Setiap fungsi tetingkap berakhir dengan klausa OVER yang mentakrifkan tetingkap: PARTITION BY mengumpulkan baris, ORDER BY menyusunnya, dan bingkai pilihan membataskan set yang meluncur. Kuasai OVER, selebihnya sekadar kosa kata.
Jadual rujukan · 27 entri
Fungsi Tetingkap SQLExplained
27 of 27 rows
Penyusunan pangkat
Integer berjujukan unik bagi setiap baris dalam tetingkap.
ROW_NUMBER() OVER (ORDER BY total DESC)
Pangkat dengan jurang; seri berkongsi pangkat dan nombor seterusnya dilangkau.
RANK() OVER (ORDER BY total DESC)
Pangkat tanpa jurang; seri berkongsi pangkat dan tiada nombor dilangkau.
DENSE_RANK() OVER (ORDER BY total DESC)
Membahagikan tetingkap tersusun kepada n baldi yang hampir sama besar.
NTILE(4) OVER (ORDER BY total DESC)
Mengintip jiran
Nilai dari n baris sebelumnya; nilai lalai menggantikannya apabila baris itu tiada.
LAG(total, 1, 0) OVER (ORDER BY created_at)
Nilai dari n baris selepasnya; nilai lalai menggantikannya apabila baris itu tiada.
LEAD(total, 1, 0) OVER (ORDER BY created_at)
Pengagregatan merentasi tetingkap
Jumlah berjalan atau per partisi tanpa merungkas baris.
SUM(total) OVER (ORDER BY created_at)
Purata berjalan atau per partisi.
AVG(total) OVER (PARTITION BY user_id)
Kiraan baris berjalan atau per partisi.
COUNT(*) OVER (PARTITION BY user_id)
Nilai terendah merentasi tetingkap atau partisi.
MIN(total) OVER (PARTITION BY user_id)
Nilai tertinggi merentasi tetingkap atau partisi.
MAX(total) OVER (PARTITION BY user_id)
SUM dengan ORDER BY dan bingkai terbuka di awal; setiap baris menjumlahkan semuanya hingga dirinya sendiri.
SUM(total) OVER (ORDER BY created_at ROWS UNBOUNDED PRECEDING)
AVG pada bingkai n baris sebelum dan selepas baris semasa.
AVG(total) OVER (ORDER BY created_at ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
Pertama, terakhir, dan persentil
Nilai pertama dalam susunan tetingkap.
FIRST_VALUE(total) OVER (ORDER BY total DESC)
Nilai terakhir dalam bingkai; tanpa UNBOUNDED FOLLOWING bingkai berhenti pada baris semasa.
LAST_VALUE(total) OVER (ORDER BY total ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
Nilai pada baris ke-n dalam susunan tetingkap.
NTH_VALUE(total, 2) OVER (ORDER BY total DESC)
Pangkat relatif sesuatu baris, dari 0 hingga 1.
PERCENT_RANK() OVER (ORDER BY total)
Bahagian baris pada atau sebelum baris semasa, dari 1/n hingga 1.
CUME_DIST() OVER (ORDER BY total)
Klausa OVER
Mentakrifkan tetingkap yang dibaca oleh setiap fungsi.
<fn>() OVER (PARTITION BY user_id ORDER BY created_at)
Memulakan semula tetingkap bagi setiap kumpulan baris.
PARTITION BY user_id
Menyusun baris dalam setiap partisi.
ORDER BY created_at
Membataskan bingkai yang meluncur, cth. dari baris sebelumnya hingga baris selepasnya.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
Membataskan bingkai mengikut nilai, bukan kedudukan baris; CURRENT ROW merangkumi baris yang seri, dan ini ialah bingkai lalai di bawah ORDER BY.
RANGE BETWEEN 100 PRECEDING AND CURRENT ROW
Membataskan bingkai mengikut kumpulan baris seri daripada ORDER BY.
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
Membuang baris semasa daripada bingkai; EXCLUDE TIES membuang baris yang serinya pula.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW
Menamakan tetingkap sekali setiap pertanyaan supaya beberapa klausa OVER boleh menggunakannya semula.
WINDOW w AS (PARTITION BY user_id ORDER BY created_at)
Menyempitkan baris yang dibaca oleh agregat tetingkap, sebelum tetingkap diterapkan.
SUM(total) FILTER (WHERE status = 'paid') OVER (ORDER BY created_at)