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        281000

RANG

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       5

La 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