Apa itu Fungsi Jendela?
Fungsi jendela memungkinkan pengguna untuk melakukan perhitungan terhadap partisi (yaitu subkelompok atau bagian) dari kumpulan hasil, biasanya tabel atau hasil dari kueri lain. Tidak seperti fungsi agregasi tradisional, yang hanya mengembalikan satu nilai untuk setiap grup yang ditentukan dalam kueri, fungsi jendela mengembalikan satu nilai untuk setiap baris input.
Bagaimana fungsi jendela membantu?
Fungsi jendela meningkatkan efisiensi dan mengurangi kerumitan kueri yang menganalisis partisi (jendela) kumpulan data dengan menyediakan alternatif untuk konsep SQL yang lebih kompleks, mis. kueri turunan. Kasus penggunaan umum meliputi:
- Hasil pemeringkatan dalam jendela tertentu (misalnya peringkat per grup)
- Mengakses data dari baris lain di jendela tertentu (mis. pelaporan periode-ke-periode)
- Agregasi dalam jendela tertentu (misalnya total berjalan):
Cara menggunakan Fungsi Jendela
Fungsi jendela dimulai dengan OVER
klausa, dan dikonfigurasi menggunakan tiga konsep:
- partisi jendela (
PARTITION BY
) - mengelompokkan baris ke dalam partisi - pemesanan jendela (
ORDER BY
) - menentukan urutan atau urutan baris dalam setiap jendela - bingkai jendela (
ROWS
) - mendefinisikan jendela dengan menggunakan offset dari baris yang ditentukan
Ikhtisar Sintaks
function (expression) OVER
( [ PARTITION BY expression_list ]
[ ORDER BY order_list ]
[ ROWS frame_clause ])
Definisi
- expression_list:daftar ekspresi yang dipisahkan koma, biasanya nama kolom
- order_list:daftar ekspresi yang dipisahkan koma, biasanya nama kolom
- frame_clause:tentukan offset menggunakan
CURRENT ROW
,_value_ PRECEDING
,UNBOUNDED PRECEDING
,_value_ FOLLOWING
,UNBOUNDED FOLLOWING
Contoh
Peringkat:peringkat per-grup
SELECT
campaign
, month
, total_cost
, rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8
Baris Sebelumnya:analisis periode-ke-periode
SELECT
campaign
, month
, total_cost
, LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4
Agregasi Dalam Jendela:total berjalan
SELECT
campaign, month, monthly_cost
, sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month
Dokumentasi &Daftar Fungsi:
Harap dicatat bahwa perbedaan halus dalam penggunaan dan sintaks ada dari database ke database. Untuk informasi khusus untuk penerapan Anda, harap gunakan dokumentasi khusus sumber yang disediakan di bawah ini.
Postgres
- Tutorial
- Fungsi
Pergeseran merah
- Tutorial
- Fungsi
Oracle
- Tutorial
SQLServer
- Tutorial
BigQuery
- Tutorial