Les fonctions de traitement analytique en ligne (OLAP) permettent d'effectuer des opérations de fonction de colonne sur une fenêtre de données. Cette fenêtre peut définir un partitionnement de lignes, un classement de lignes dans des partitions ou un groupe d'agrégation. Le groupe d'agrégation permet à l'utilisateur d'indiquer quelles sont les lignes, en relation avec la ligne en cours, qui font l'objet d'un calcul. L'utilisation de cette fenêtre permet d'effectuer des opérations telles que le calcul des sommes cumulées et des moyennes mobiles.
Outre la possibilité de fournir à l'utilisateur une fenêtre pour les fonctions de colonne existantes, (telles que SUM et AVG), les fonctions OLAP peuvent exécuter des opérations de classement (RANK et DENSE_RANK) et fournissent la numérotation des lignes (ROW_NUMBER), en fonction du partitionnement et de la numérotation des lignes.
L'exemple de requête suivant illustre le classement d'un employé dans un service en fonction de son salaire et affiche la somme cumulée des salaires du service (pour les services 15 et 38) :
SELECT NAME, DEPT, RANK () OVER (PARTITION BY DEPT ORDER BY SALARY DESC) AS RANK, SUM (SALARY) OVER (PARTITION BY DEPT ORDER BY SALARY DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CUMULATIVE_SUM FROM STAFF WHERE DEPT IN (15,38) ORDER BY DEPT, RANK
Cette instruction donne le résultat suivant :
NAME DEPT RANK CUMULATIVE_SUM ---------- --------- ---------- -------------------- Hanes 15 1 20659.80 Rothman 15 2 37162.63 Ngan 15 3 49670.83 Kermisch 15 4 61929.33 O'Brien 38 1 18006.00 Marenghi 38 2 35512.75 Quigley 38 3 52321.05 Naughton 38 4 65275.80 Abrahams 38 5 77285.55