Teradata - Fonctions OLAP
Les fonctions OLAP sont similaires aux fonctions d'agrégation, sauf que les fonctions d'agrégation ne renverront qu'une seule valeur tandis que la fonction OLAP fournira les lignes individuelles en plus des agrégats.
Syntaxe
Voici la syntaxe générale de la fonction OLAP.
<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)Les fonctions d'agrégation peuvent être SUM, COUNT, MAX, MIN, AVG.
Exemple
Considérez le tableau des salaires suivant.
| Numéro d'employé | Brut | Déduction | Salaire net | 
|---|---|---|---|
| 101 | 40 000 | 4 000 | 36 000 | 
| 102 | 80 000 | 6 000 | 74 000 | 
| 103 | 90 000 | 7 000 | 83 000 | 
| 104 | 75 000 | 5 000 | 70 000 | 
Voici un exemple pour trouver la somme cumulée ou le total cumulé de NetPay sur la table des salaires. Les enregistrements sont triés par EmployeeNo et la somme cumulée est calculée sur la colonne NetPay.
SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante.
EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000RANG
La fonction RANK classe les enregistrements en fonction de la colonne fournie. La fonction RANK peut également filtrer le nombre d'enregistrements renvoyés en fonction du rang.
Syntaxe
Voici la syntaxe générique pour utiliser la fonction RANK.
RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])Exemple
Considérez le tableau des employés suivant.
| Numéro d'employé | Prénom | Nom de famille | JoinedDate | DépartementID | Date de naissance | 
|---|---|---|---|---|---|
| 101 | Mike | James | 27/03/2005 | 1 | 05/01/1980 | 
| 102 | Robert | Williams | 25/04/2007 | 2 | 05/03/1983 | 
| 103 | Peter | Paul | 21/03/2007 | 2 | 01/04/1983 | 
| 104 | Alex | Stuart | 2/1/2008 | 2 | 06/11/1984 | 
| 105 | Robert | James | 1/4/2008 | 3 | 01/12/1984 | 
La requête suivante classe les enregistrements de la table des employés par date de connexion et attribue le classement à la date de connexion.
SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante.
EmployeeNo   JoinedDate   Seniority 
-----------  ----------  ----------- 
   101       2005-03-27       1 
   103       2007-03-21       2 
   102       2007-04-25       3 
   105       2008-01-04       4 
   104       2008-02-01       5La clause PARTITION BY regroupe les données par les colonnes définies dans la clause PARTITION BY et exécute la fonction OLAP dans chaque groupe. Voici un exemple de la requête qui utilise la clause PARTITION BY.
SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante. Vous pouvez voir que le rang est réinitialisé pour chaque département.
EmployeeNo  DepartmentNo  JoinedDate   Seniority 
-----------  ------------  ----------  ----------- 
    101           1        2005-03-27       1 
    103           2        2007-03-21       1 
    102           2        2007-04-25       2 
    104           2        2008-02-01       3 
    105           3        2008-01-04       1