sql >> Databáze >  >> RDS >> Oracle

Klauzule OVER v Oracle

OVER klauzule specifikuje rozdělení, řazení a okno, "nad kterým" analytická funkce pracuje.

Příklad č. 1:výpočet klouzavého průměru

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

Funguje přes pohyblivé okno (šířka 3 řádků) přes řádky, seřazené podle data.

Příklad č. 2:výpočet průběžného zůstatku

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

Funguje nad oknem, které obsahuje aktuální řádek a všechny předchozí řádky.

Poznámka:pro agregaci s OVER klauzule určující řazení ORDER , výchozí okno je UNBOUNDED PRECEDING na CURRENT ROW , takže výše uvedený výraz může být zjednodušen na, se stejným výsledkem:

SUM(amt) OVER (ORDER BY date)

Příklad č. 3:vypočítejte maximum v rámci každé skupiny

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

Funguje nad oknem, které obsahuje všechny řádky pro konkrétní oddělení.

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



  1. Co znamená dvojtečka:dělat v dotazu SQL?

  2. #1139 - Z regulárního výrazu se vyskytla chyba 'repetition-operator operand invalid'

  3. Jak zobrazit všechna národní prostředí v MariaDB

  4. Použití podmínky if ve vložení SQL Server