76 votes

PLUS de clause dans Oracle

Quelle est la signification de la clause OVER dans Oracle?

85voto

Jeffrey Kemp Points 26050

Le PLUS de la clause spécifie le partitionnement, la commande et la fenêtre "sur laquelle" l'analytique de la fonction fonctionne.

Par exemple, la fonction calcule une moyenne mobile:

AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)

date   amt   avg_amt
=====  ====  =======
1-Jan  10.0   7.0
2-Jan  11.0  17.0
3-Jan  30.0  17.0
4-Jan  10.0  18.0
5-Jan  14.0   8.0

Il fonctionne sur une fenêtre mobile (3 lignes de large) sur les rangées, classées par date.

Ce calcule le solde courant:

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

Il fonctionne sur une fenêtre qui comprend la ligne actuelle et avant des lignes.

Ce calcule le maximum, séparément pour chaque "dept":

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

Il fonctionne sur une fenêtre qui contient toutes les lignes pour un particulier dept.

32voto

Quassnoi Points 191041

Vous pouvez l'utiliser pour transformer certaines fonctions d'agrégat en analytique:

SELECT  MAX(date)
FROM    mytable

sera de retour 1 ligne avec un seul maximum,

SELECT  MAX(date) OVER (ORDER BY id)
FROM    mytable

renvoie toutes les lignes avec une course maximale.

20voto

cletus Points 276888

C'est une partie de l' Oracle des fonctions analytiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X