Window Funktion

Aus DBWiki
Wechseln zu: Navigation, Suche

Eine Window-Funktion in SQL erlaubt definierten Zugriff auf Datensätze, die sich vor oder hinter dem aktuellen Datenstz der Ergebnismenge befinden. Auf diesen Bereich (das Window - auch Frame genannt) lassen sich definierte Funktionen anwenden.


Folgende Funktionen können in einem Frame verwendet werden:

  • row_number()
    Nummer der aktuellen Zeile innerhalb der Partition (beginnend mit 1).
  • <ciode>rank()</code>
    Nummer der aktuellen Zeile innerhalb ihrer Partition, beginnend mit dem Rang der aktuellen Zeile. Ähnlich wie row_number(), nur dass Lücken bei gleichem Rang entstehen.
  • dense_rank()
    Wie rank(), mit dem Unterschied, dass Lücken gefüllt werden.
  • percent_rank()
    Relativer Rang der aktuellen Zeile: (Rang - 1) / (Summe der Partitionszeilen - 1)
  • cume_dist()
    Kumulative Verteilung: (Anzahl der vorangegangenen Partitionszeilen inkl. aktueller Zeile) / Gesamtzahl der Partitionszeilen
  • ntile(anzahl_gruppen)
    Ganzzahl, die von 1 bis zu anzahl_gruppen reicht, wobei die Partition so gleichmäßig wie möglich geteilt wird.
  • lag(ausdruck [, offset [, standardwert ]])Gibt einen Wert zurück, der in der Zeile ausgewertet wird, die vor der aktuellen Zeile innerhalb der Partition versetzt ist. Wenn es keine solche Zeile gibt, gibt lag stattdessen den standardwert zurück (der vom gleichen Typ wie der ausdruck sein muss). Sowohl offset als auch standardwert werden in Bezug auf die aktuelle Zeile ausgewertet. Wenn nicht angegeben, wird offset auf 1 und standardwert auf Null gesetzt.
  • lead(ausdruck [, offset [, standardwert ]])
    Gibt einen Wert zurück, der in der Zeile ausgewertet wird, die nach der aktuellen Zeile innerhalb der Partition versetzt ist. Wenn es keine solche Zeile gibt, gibt lead stattdessen den standardwert zurück (der vom gleichen Typ wie der ausdruch sein muss). Sowohl offset als auch standardwert werden in Bezug auf die aktuelle Zeile ausgewertet. Wenn nicht angegeben, wird offset auf 1 und standardwert auf Null gesetzt.
  • first_value(ausdruck)
    Gibt den ersten Wert des Window Frame zurück
  • last_value(ausdruck)
    Gibt den letzten Wert des Window Frame zurück
  • nth_value(ausdruck, offset)
    Gibt einen Wert zurück, der in der Zeile ausgewertet wird, die die n-te Zeile des Window Frame ist (ab 1 zählend). Null, falls eine solche Zeile nicht vorhanden ist.


Wiki hinweis.png Anmerkung: Zusätzlich können die Aggregat-Funktionen des SQL-Dialekts in einem Frame verwendet werden.


Die Definition des Frame wird mit dem Schlüsselwort OVER eingeleitet und bezieht sich entweder auf einen zuvor mit der WITH-Klausel benannten und definierten Frame oder lässt die Frame-Definition in Klammern folgen.

...
OVER frame_name
-- oder
OVER ( frame_definition )
...

Die frame_definition setzt sich aus mehreren optionalen Angaben zusammen und kann folgende Angaben beinhalten:

  • [definierter_frame_name]
  • [PARTITION BY ausdruck [, ...]]
    Bildet eine Gruppe von Datensätzen ähnlich der GROUP BY-Klausel.
  • [ORDER BY ausdruck [ASC | DESC] [, ...]]
    Legt die Reihenfolge innerhalb einer PARTITION fest.
  • [frame_klausel]


frame_klausel kann eine der beiden folgenden Angaben enthalten:

  • [RANGE | ROWS] frame_start
  • [RANGE | ROWS] BETWEEN frame_start AND frame_ende


frame_start bzw. frame_ende setzt sich aus einer der folgenden Angaben zusammen:

  • UNBOUNDED PRECEDING
    Legt frame_start auf den Beginn der Partition fest.
  • wertangabe PRECEDING
    Gibt die Anzahl der davor liegenden Datensätze an und kann nur als frame_start angegeben werden.
  • CURRENT ROW
    Bezieht sich auf den aktuellen Datensatz und kann als frame_start oder frame_ende verwendet werden.
  • wertangabe FOLLOWING
    Gibt die Anzahl der dahinter liegenden Datensätze an und kann nur als frame_ende angegeben werden.
  • UNBOUNDED FOLLOWING
    Legt frame_ende auf das Ende der Partition fest.


Web-Links