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).
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. Siehe DENSE_RANK-Funktion.
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 |
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].
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |