Initiation à SQL


Fonctions OLAP

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


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]