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