OLTRE clausola Oracle
-
11-09-2019 - |
Domanda
Qual è il significato della clausola OVER in Oracle?
Soluzione
La clausola OVER specifica il partizionamento, ordinare e finestra "sulla quale" la funzione analitica opera.
Ad esempio, questo calcola una media mobile:
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
Si opera in un cristallo mobile (larga 3 righe) sulle righe, ordinati per data.
Questa calcola un saldo corrente:
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
Si opera su una finestra che include la riga corrente e tutte le righe precedenti.
Questo calcola la massima, separatamente per ogni "reparto":
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
Si opera su una finestra che contiene tutte le righe per un particolare reparto.
SQL Fiddle: http://sqlfiddle.com/#!4/9eecb7d/122
Altri suggerimenti
Si può usare per trasformare alcune funzioni di aggregazione in analitica:
SELECT MAX(date)
FROM mytable
tornerà fila 1
con un solo massimo,
SELECT MAX(date) OVER (ORDER BY id)
FROM mytable
restituirà tutte le righe con un massimo in esecuzione.
E 'parte del Oracle funzioni analitiche .