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-Benutzerhandbuch » Daten abfragen und ändern » OLAP-Unterstützung » Fensterfunktionen in SQL Anywhere » Fenster-Rangfunktionen

 

RANK-Funktion

Die RANK-Funktion liefert den Rang des Wertes in der aktuellen Zeile im Vergleich zu den Werten in anderen Zeilen. Der Rang eines Wertes reflektiert die Reihenfolge, in der er erscheinen würde, wenn die Werteliste sortiert wäre.

Die RANK-Funktion berechnet den Rang für den Ausdruck, der in der ORDER BY-Klausel des Fensters angegeben wurde. Falls die ORDER BY-Klausel mehrere Ausdrücke enthält, werden der zweite und die folgenden Ausdrücke benutzt, um Gleichwertigkeiten aufzulösen, falls der erste Ausdruck den gleichen Wert in angrenzenden Zeilen ergibt. NULL steht vor allen anderen Werten (bei aufsteigender Sortierfolge).

Beispiel 1

Die folgende Abfrage ermittelt die drei teuersten Produkte in der Datenbank. Für das Fenster wird eine absteigende Sortierfolge festgelegt, sodass das teuerste Produkt den niedrigsten Rang hat. Die Rangfolgen beginnen mit 1.

SELECT Top 3 *
       FROM ( SELECT Description, Quantity, UnitPrice,
              RANK() OVER ( ORDER BY UnitPrice DESC ) AS Rank 
              FROM Products ) AS DT
ORDER BY Rank;

Diese Abfrage liefert das folgende Ergebnis:

Description Quantity UnitPrice Rank
1 Zipped Sweatshirt 32 24.00 1
2 Hooded Sweatshirt 39 24.00 1
3 Cotton Shorts 80 15.00 3

Beachten Sie, dass die Zeilen 1 und 2 den gleichen Wert für "Unit Price" und daher auch den gleichen Rang haben. Dies wird als Gleichwertigkeit bezeichnet.

Bei der RANK-Funktion macht der Rangwert nach einer Gleichwertigkeit einen Sprung. So springt der Rangwert für Zeile 3 beispielsweise auf 3 statt auf 2. Dies ist unterschiedlich zur Funktion DENSE_RANK, bei der nach einer Gleichwertigkeit kein Sprung auftritt. Weitere Hinweise finden Sie unter DENSE_RANK-Funktion.

Beispiel 2

Die folgende SQL-Abfrage findet die Mitarbeiter und Mitarbeiterinnen in Utah und ordnet sie nach Gehaltshöhe in absteigender Reihenfolge.

SELECT Surname, Salary, Sex,
     RANK() OVER ( ORDER BY Salary DESC ) "Rank"
     FROM Employees 
WHERE State IN ( 'UT' );

Die nachstehende Tabelle stellt die Ergebnismenge dieser Abfrage dar:

Surname Salary Sex Rank
1 Shishov 72995.00 F 1
2 Wang 68400.00 M 2
3 Cobb 62000.00 M 3
4 Morris 61300.00 M 4
5 Diaz 54900.00 M 5
6 Driscoll 48023.69 M 6
7 Hildebrand 45829.00 F 7
8 Goggin 37900.00 M 8
9 Rebeiro 34576.00 M 9
10 Bigelow 31200.00 F 10
11 Lynch 24903.00 M 11
Beispiel 3

Sie können Ihre Daten partitionieren, um andere Ergebnisse anzuzeigen. Wenn Sie die Abfrage aus Beispiel 2 verwenden, können Sie die Daten ändern, indem Sie sie nach Geschlecht partitionieren. Im folgenden Beispiel werden Mitarbeiter in absteigender Rangfolge nach Gehalt angeordnet und nach Geschlecht aufgeteilt.

SELECT Surname, Salary, Sex,
     RANK ( ) OVER ( PARTITION BY Sex
     ORDER BY Salary DESC ) "Rank"
     FROM Employees 
WHERE State IN ( 'UT' );

Die nachstehende Tabelle stellt die Ergebnismenge dieser Abfrage dar:

Surname Salary Sex Rank
1 Wang 68400.00 M 1
2 Cobb 62000.00 M 2
3 Morris 61300.00 M 3
4 Diaz 54900.00 M 4
5 Driscoll 48023.69 M 5
6 Goggin 37900.00 M 6
7 Rebeiro 34576.00 M 7
8 Lynch 24903.00 M 8
9 Shishov 72995.00 F 1
10 Hildebrand 45829.00 F 2
11 Bigelow 31200.00 F 3

Weitere Hinweise zur Syntax der RANK-Funktion finden Sie unter RANK-Funktion [Rangfolge].