Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (P-Z)

 

WINDOW-Klausel

In einer SELECT-Anweisung verwenden Sie die WINDOW-Klausel zur teilweisen oder vollständigen Definition eines Fensters, das von Fensterfunktionen wie AVG und RANK verwendet wird.

Syntax
WINDOW Fensterausdruck, ...
Fensterausdruck : Name_neues_Fenster AS ( Fensterspezifikation)
Fensterspezifikation :
[ Vorhandene-Fenster-Name ]
[ PARTITION BY Ausdruck, ]
[ ORDER BY Ausdruck [ ASC | DESC ]
[ { ROWS | RANGE } { Fenster-Frame-Beginn | Fenster-Frame--Zwischen }  
Fenster-Frame-Beginn :
{ UNBOUNDED PRECEDING
 | Ganzzahl_ohne_Vorzeichen PRECEDING
 | CURRENT ROW }
Fenster-Frame-Zwischen :
BETWEEN Fenster-Frame-Bindung1 AND Fenster-Frame-Bindung2
Fenster-Frame-Bindung :
  Fenster-Frame-Beginn
| UNBOUNDED FOLLOWING 
| Ganzzahl_ohne_Vorzeichen FOLLOWING
Parameter
  • 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 Ausdruck 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 Ausdruck 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 Daten 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. Hinweise zu den Standardwerten finden Sie unter Fenster definieren.

    • 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, die der aktuellen Zeile vorhergehen, ausgedrückt. 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. die ihr 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 der aktuellen Zeile folgen.

      Verwenden Sie UNBOUNDED FOLLOWING, um die letzte Zeile im Fenster als die letzte Zeile im Fensterabschnitt festzulegen.

Bemerkungen

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.

Weitere Hinweise zu Defintionen und zum Einsatz von Fenstern, mit denen die gewünschten Ergebnisse erzielt werden, finden Sie unter Fenster definieren und Fensterdefinition: Inlining und die WINDOW-Klausel.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   SQL/2003-Funktionen T611, T612

Beispiel

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 SalaryWindow
FROM Employees
WINDOW SalaryWindow AS ( PARTITION BY State )
ORDER BY State, Surname;