sql >> Database teknologi >  >> RDS >> Oracle

OVER-klausul i Oracle

OVER klausul specificerer partitioneringen, rækkefølgen og vinduet "over hvilket" den analytiske funktion fungerer.

Eksempel #1:Beregn et glidende gennemsnit

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

Den fungerer over et bevægeligt vindue (3 rækker bredt) over rækkerne, sorteret efter dato.

Eksempel #2:Beregn en løbende balance

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

Det fungerer over et vindue, der inkluderer den aktuelle række og alle tidligere rækker.

Bemærk:for et aggregat med en OVER klausul, der specificerer en sorterings ORDER , standardvinduet er UNBOUNDED PRECEDING til CURRENT ROW , så ovenstående udtryk kan forenkles til, med samme resultat:

SUM(amt) OVER (ORDER BY date)

Eksempel #3:beregn maksimum inden for hver gruppe

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

Det fungerer over et vindue, der inkluderer alle rækker for en bestemt afd.

SQL Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122



  1. En introduktion til MySQL-implementering ved hjælp af en Ansible-rolle

  2. SQLite kommandoer

  3. MySQL SELECT DISTINCT flere kolonner

  4. Hvordan ser man CREATE VIEW-koden for en visning i PostgreSQL?