SQL Erste Schritte


OLAP-Funktionen

OLAP-Funktionen (OnLine Analytical Processing - Online-Analyseverarbeitung) führen eine Spaltenfunktionsoperation für ein Datenfenster aus. Dieses Fenster kann eine Zeilenpartitionierung, eine Reihenfolge von Zeilen innerhalb von Partitionen oder eine Spaltenberechnungsgruppe angeben. Anhand der Spaltenberechnungsgruppe kann der Benutzer angeben, welche Zeilen in Bezug auf die aktuelle Zeile in die Berechnung einfließen. Die Verwendung eines solchen Fensters ermöglicht Operationen wie kumulierte Summen und gleitende Durchschnitte.

OLAP-Funktionen ermöglichen es dem Benutzer nicht nur, ein Fenster für vorhandene Spaltenfunktionen (wie z. B. SUM und AVG) anzugeben. Mit ihrer Hilfe können außerdem Rangordnungsoperationen (RANK und DENSE_RANK) ausgeführt und Zeilen numeriert (ROW_NUMBER) werden, sofern eine spezifische Partitionierung und Reihenfolge der Zeilen vorliegt.

Die folgende Beispielabfrage ermittelt für die Abteilungen 15 und 38, basierend auf dem Gehalt, die Position eines Mitarbeiters in der Rangordnung der Abteilung und zeigt die kumulierte Summe der Gehälter in der Abteilung an:

     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

Diese Anweisung erzeugt das folgende Ergebnis:

     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


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]