Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

klausa OVER di Oracle

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak Dapat Mengkompilasi GI 12.1.0.2 dan Kesalahan Segmentasi

  2. PRVG-2027 Pemilik file tidak konsisten di seluruh node

  3. Oracle 12cR2 sekarang dalam versi Beta

  4. Bagaimana cara memformat kueri Oracle saya sehingga kolom tidak terbungkus?

  5. Menghapus baris duplikat dari tabel di Oracle