Oracle
 sql >> база данни >  >> RDS >> Oracle

Клауза OVER в Oracle

OVER Клаузата определя разделянето, подреждането и прозореца, "над който" оперира аналитичната функция.

Пример №1:изчислете пълзяща средна

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

Работи върху движещ се прозорец (широчина 3 реда) над редовете, подредени по дата.

Пример №2:изчисляване на текущ баланс

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

Той работи в прозорец, който включва текущия ред и всички предишни редове.

Забележка:за агрегат с OVER клауза, указваща сортиране ORDER , прозорецът по подразбиране е UNBOUNDED PRECEDING към CURRENT ROW , така че горният израз може да бъде опростен до, със същия резултат:

SUM(amt) OVER (ORDER BY date)

Пример №3:изчислете максимума във всяка група

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

Работи върху прозорец, който включва всички редове за конкретен отдел.

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. Топ 30 най-полезни заявки за едновременен мениджър

  2. Винаги ли DDL операторите ви дават имплицитен комит или можете да получите имплицитно връщане назад?

  3. ODP.NET Oracle.ManagedDataAccess причинява края на мрежовата сесия ORA-12537 на файла

  4. Как да пусна таблица в oracle

  5. Как да заменя конкретни стойности в колона на база данни на Oracle?