sql >> Databasteknik >  >> RDS >> Oracle

OVER-klausul i Oracle

OVER klausul specificerar partitioneringen, ordningen och fönstret "över vilket" den analytiska funktionen fungerar.

Exempel #1:beräkna ett glidande medelvärde

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 fungerar över ett rörligt fönster (3 rader brett) över raderna, sorterade efter datum.

Exempel 2:beräkna en löpsaldo

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 fungerar över ett fönster som inkluderar den aktuella raden och alla tidigare rader.

Obs:för ett aggregat med en OVER sats som anger en sorterings ORDER , är standardfönstret UNBOUNDED PRECEDING till CURRENT ROW , så uttrycket ovan kan förenklas till, med samma resultat:

SUM(amt) OVER (ORDER BY date)

Exempel 3:beräkna maxvärdet inom varje grupp

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 fungerar över ett fönster som inkluderar alla rader för en viss avdelning.

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



  1. Hur använder man GROUP BY för att sammanfoga strängar i MySQL?

  2. Guide till designdatabas för restaurangordersystem i MySQL

  3. Hur man ställer in värdet på det sammansatta variabelfältet med hjälp av dynamisk SQL

  4. Hur ändrar man teckenuppsättningen (och SAMMANSTÄLLNING) i en databas?