Bestimmt das ganze Fenster oder einen Fensterabschnitt für die Verwendung mit Fensterfunktionen wie AVG und RANK in einer SELECT-Anweisung.
WINDOW window-expression, ...
window-expression : new-window-name AS ( window-spec )
window-spec : [ existing-window-name ] [ PARTITION BY expression, ... ] [ ORDER BY expression [ ASC | DESC ], ... ] [ { ROWS | RANGE } { window-frame-start | window-frame-between } ]
window-frame-start : { UNBOUNDED PRECEDING | unsigned-integer PRECEDING | CURRENT ROW }
window-frame-between : BETWEEN window-frame-bound1 AND window-frame-bound2
window-frame-bound : window-frame-start | UNBOUNDED FOLLOWING | unsigned-integer FOLLOWING
PARTITION BY-Klausel Die PARTITION BY-Klausel organisiert die Ergebnismenge in logische Gruppen, basierend auf den eindeutigen Werten im angegebenen Ausdruck. Wenn diese Klausel mit Fensterfunktionen verwendet wird, werden die Funktionen jeweils an den einzelnen Fensterabschnitten angewendet. Wenn Sie z.B. nach PARTITION BY einen Spaltennamen angeben, wird die Ergebnismenge anhand von unterschiedlichen Werte in der Spalte aufgeteilt.
Wenn diese Klausel weggelassen wird, wird die gesamte Ergebnismenge als ein Fensterabschnitt angesehen.
PARTITION BY expression kann kein Ganzzahlliteral sein.
ORDER BY-Klausel Die ORDER BY-Klausel legt fest, wie die Zeilen in jedem Fensterabschnitt der Ergebnismenge sortiert werden. Sie können die Sortierfolge weiter steuern, indem Sie ASC für eine aufsteigende Sortierfolge (Standardwert) oder DESC für eine absteigende Sortierfolge angeben.
ORDER BY expression kann keine Ganzzahl sein.
Wenn diese Klausel weggelassen wird, gibt SQL Anywhere Zeilen in der effizientesten Reihenfolge zurück. Die Präsentation der Ergebnismengen kann unterschiedlich sein, je nachdem, wann Sie zuletzt auf die Zeile zugegriffen haben.
ROWS-Klausel und RANGE-Klausel Verwenden Sie die ROWS- oder RANGE-Klausel, um die Größe des Fensters auszudrücken. Die Fenstergröße kann eine, viele oder alle Zeilen eines Fensterabschnitts umfassen. Sie können die Größe des Fensters entweder als Bereich von Datenwerten ab der aktuellen Zeile (RANGE) oder als Anzahl der physischen Zeilen ab der aktuellen Zeile (ROWS) ausdrücken.
Wenn Sie die RANGE-Klausel verwenden, müssen Sie auch eine ORDER BY-Klausel angeben, weil Bereichsberechnungen ein Sortieren der Werte erfordern. Die ORDER BY-Klausel für Bereiche muss einen Ausdruck enthalten und dieser Ausdruck muss entweder ein Datum oder einen nummerischen Wert ergeben.
Wenn Sie keine ROWS- oder RANGE-Klausel angeben, benutzt der Datenbankserver Standardfenstergrößen basierend auf einer eventuell vorhandenen ORDER BY-Klausel.
PRECEDING-Klausel
Verwenden Sie die PRECEDING-Klausel, um die erste Zeile des Fensters zu bestimmen, wobei die aktuelle Zeile als Bezugspunkt
verwendet wird. Die Startzeile wird als die Anzahl der Zeilen ausgedrückt, die der aktuellen Zeile vorhergehen. Beispiel:
5 PRECEDING
bewirkt, dass das Fenster mit der fünften Zeile beginnt, die der aktuellen Zeile vorhergeht.
Verwenden Sie UNBOUNDED PRECEDING, um die erste Zeile im Fenster als die erste Zeile im Fensterabschnitt festzulegen.
BETWEEN-Klausel
Verwenden Sie die BETWEEN-Klausel, um die erste und letzte Zeile des Fensters zu bestimmen, wobei die aktuelle Zeile
als Bezugspunkt verwendet wird. Erste und letzte Zeilen werden als die Anzahl der Zeilen ausgedrückt, die der aktuellen Zeile
vorhergehen bzw. auf sie folgen. Beispiel: BETWEEN 3 PRECEDING AND 5 FOLLOWING
legt fest, dass das Fenster mit der dritten Zeile vor der aktuellen Zeile beginnt und mit der fünften Zeile nach der aktuellen
Zeile endet.
Verwenden Sie BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING, um die erste und die letzte Zeile im Fenster als die erste bzw. letzte Zeile im Fensterabschnitt festzulegen. Dies entspricht dem Standardverhalten, wenn keine ROW- oder RANGE-Klausel angegeben ist.
FOLLOWING-Klausel Verwenden Sie die FOLLOWING-Klausel, um die letzte Zeile des Fensters zu bestimmen, wobei die aktuelle Zeile als Bezugspunkt verwendet wird. Die letzte Zeile wird als die Anzahl der Zeilen ausgedrückt, die auf die aktuelle Zeile folgen.
Verwenden Sie UNBOUNDED FOLLOWING, um die letzte Zeile im Fenster als die letzte Zeile im Fensterabschnitt festzulegen.
Die WINDOW-Klausel muss in einer SELECT-Anweisung vor der ORDER BY-Klausel erscheinen.
Mit Ausnahme der LIST-Funktion können alle Aggregatfunktionen als Fensterfunktionen verwendet werden. Rangfolge-Aggregatfunktionen (RANK, DENSE_RANK, PERCENT_RANK, CUME_DIST und ROW_NUMBER) jedoch erfordern eine ORDER BY-Klausel und erlauben keine ROW- oder RANGE-Klausel in der WINDOW-Klausel bzw. in der Inline-Definition. Für alle anderen Fensterfunktionen können Sie jede der Klauseln verwenden.
SQL/2008 Die WINDOW-Klausel und die Fenster-Aggregatfunktionen umfassen die optionalen SQL/2008-Sprachenfunktionen T611 (grundlegende OLAP-Vorgänge) und T612 (erweiterte OLAP-Vorgänge). Das Fensterfunktionen FIRST_VALUE und LAST_VALUE sind Erweiterungen des Herstellers.
Das folgende Beispiel gibt das Gehalt eines Mitarbeiters und das Durchschnittsgehalt aller Mitarbeiter im gewählten Bundesstaat zurück. Die Ergebnisse werden nach Bundesstaat (State) und dann nach Nachnamen (Surname) sortiert.
SELECT EmployeeID, Surname, Salary, State, AVG( Salary ) OVER Salary_Window FROM Employees WINDOW Salary_Window AS ( PARTITION BY State ) ORDER BY State, Surname; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |