Teradata - OLAP-Funktionen

OLAP-Funktionen ähneln Aggregatfunktionen, außer dass die Aggregatfunktionen nur einen Wert zurückgeben, während die OLAP-Funktion die einzelnen Zeilen zusätzlich zu den Aggregaten bereitstellt.

Syntax

Es folgt die allgemeine Syntax der OLAP-Funktion.

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)

Aggregationsfunktionen können SUM, COUNT, MAX, MIN, AVG sein.

Beispiel

Betrachten Sie die folgende Gehaltstabelle.

EmployeeNo Brutto Abzug Nettogehalt
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

Im Folgenden finden Sie ein Beispiel, um die kumulierte Summe oder laufende Summe von NetPay in der Gehaltsliste zu ermitteln. Die Datensätze werden nach EmployeeNo sortiert und die kumulierte Summe wird in der NetPay-Spalte berechnet.

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000

RANG

Die RANK-Funktion ordnet die Datensätze basierend auf der angegebenen Spalte. Die RANK-Funktion kann auch die Anzahl der zurückgegebenen Datensätze basierend auf dem Rang filtern.

Syntax

Es folgt die generische Syntax zur Verwendung der RANK-Funktion.

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

Beispiel

Betrachten Sie die folgende Mitarbeitertabelle.

EmployeeNo Vorname Familienname, Nachname JoinedDate DepartmentID Geburtsdatum
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 01.02.2008 2 06.11.1984
105 Robert James 04.01.2008 3 01.12.1984

Nach der Abfrage werden die Datensätze der Mitarbeitertabelle nach Beitrittsdatum sortiert und das Ranking nach Beitrittsdatum zugewiesen.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt.

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

Die PARTITION BY-Klausel gruppiert die Daten nach den in der PARTITION BY-Klausel definierten Spalten und führt die OLAP-Funktion in jeder Gruppe aus. Im Folgenden finden Sie ein Beispiel für die Abfrage, die die PARTITION BY-Klausel verwendet.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. Sie können sehen, dass der Rang für jede Abteilung zurückgesetzt wird.

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