OVER
klausa menentukan partisi, pengurutan, dan jendela "di mana" fungsi analitik beroperasi.
Contoh #1:hitung rata-rata bergerak
AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
date amt avg_amt
===== ==== =======
1-Jan 10.0 10.5
2-Jan 11.0 17.0
3-Jan 30.0 17.0
4-Jan 10.0 18.0
5-Jan 14.0 12.0
Ini beroperasi di atas jendela bergerak (lebar 3 baris) di atas baris, diurutkan berdasarkan tanggal.
Contoh #2:hitung saldo berjalan
SUM(amt) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
date amt sum_amt
===== ==== =======
1-Jan 10.0 10.0
2-Jan 11.0 21.0
3-Jan 30.0 51.0
4-Jan 10.0 61.0
5-Jan 14.0 75.0
Ini beroperasi di atas jendela yang menyertakan baris saat ini dan semua baris sebelumnya.
Catatan:untuk agregat dengan OVER
klausa yang menentukan jenis ORDER
, jendela defaultnya adalah UNBOUNDED PRECEDING
ke CURRENT ROW
, sehingga ekspresi di atas dapat disederhanakan menjadi, dengan hasil yang sama:
SUM(amt) OVER (ORDER BY date)
Contoh #3:hitung jumlah maksimum dalam setiap grup
MAX(amt) OVER (PARTITION BY dept)
dept amt max_amt
==== ==== =======
ACCT 5.0 7.0
ACCT 7.0 7.0
ACCT 6.0 7.0
MRKT 10.0 11.0
MRKT 11.0 11.0
SLES 2.0 2.0
Ini beroperasi di atas jendela yang mencakup semua baris untuk dept tertentu.
SQL Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122