Ähnlich wie die PERCENT-Funktion liefert die PERCENT_RANK-Funktion den Rang des Wertes in der Spalte, die in der ORDER BY-Klausel des Fensters angegeben wurde, jedoch als Bruch zwischen 0 und 1 ausgedrückt wurde, berechnet durch (RANK - 1)/(- 1).
Wenn sich das Fenster durch die Eingabezeilen nach unten bewegt, wird der Rang für den Ausdruck berechnet, 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).
Das folgende Beispiel gibt eine Ergebnismenge zurück, die die Rangfolge der Gehälter von Mitarbeitern in New York anhand ihrer Geschlechtszugehörigkeit anzeigt. Die Ergebnisse sind in absteigender Reihenfolge unter Verwendung eines dezimalen Prozentsatzes gereiht und anhand der Geschlechtszugehörigkeit aufgeschlüsselt.
SELECT DepartmentID, Surname, Salary, Sex, PERCENT_RANK( ) OVER ( PARTITION BY Sex ORDER BY Salary DESC ) AS PctRank FROM Employees WHERE State IN ( 'NY' ); |
Diese Abfrage liefert folgende Ergebnisse:
DepartmentID | Surname | Salary | Sex | PctRank | |
---|---|---|---|---|---|
1 | 200 | Martel | 55700.000 | M | 0.0 |
2 | 100 | Guevara | 42998.000 | M | 0.333333333 |
3 | 100 | Soo | 39075.000 | M | 0.666666667 |
4 | 400 | Ahmed | 34992.000 | M | 1.0 |
5 | 300 | Davidson | 57090.000 | F | 0.0 |
6 | 400 | Blaikie | 54900.000 | F | 0.333333333 |
7 | 100 | Whitney | 45700.000 | F | 0.666666667 |
8 | 400 | Wetherby | 35745.000 | F | 1.0 |
Da die Eingabe nach Geschlecht (Sex) partitioniert ist, wird PERCENT_RANK für Männer und Frauen getrennt ausgewertet.
Im folgenden Beispiel wird eine Liste der Mitarbeiterinnen in Utah und Arizona zurückgegeben, die nach Gehaltshöhe in absteigender Reihenfolge angeordnet werden. Hier wird die PERCENT_RANK-Funktion benutzt, um eine kumulative Gesamtsumme in absteigender Reihenfolge auszugeben.
SELECT Surname, Salary, PERCENT_RANK ( ) OVER ( ORDER BY Salary DESC ) "Rank" FROM Employees WHERE State IN ( 'UT', 'AZ' ) AND Sex IN ( 'F' ); |
Diese Abfrage liefert folgende Ergebnisse:
Surname | Salary | Rank | |
---|---|---|---|
1 | Shishov | 72995.00 | 0 |
2 | Jordan | 51432.00 | 0.25 |
3 | Hildebrand | 45829.00 | 0.5 |
4 | Bigelow | 31200.00 | 0.75 |
5 | Bertrand | 29800.00 | 1 |
Sie können PERCENT_RANK verwenden, um die oberen oder unteren Prozentsätze in einer Datenmenge zu finden. Im folgenden Beispiel gibt die Abfrage männliche Mitarbeiter zurück, deren Gehalt in den oberen fünf Prozent der Datenmenge liegt.
SELECT * FROM ( SELECT Surname, Salary, PERCENT_RANK ( ) OVER ( ORDER BY Salary DESC ) "Rank" FROM Employees WHERE Sex IN ( 'M' ) ) AS DerivedTable ( Surname, Salary, Percent ) WHERE Percent < 0.05; |
Diese Abfrage liefert folgende Ergebnisse:
Surname | Salary | Percent | |
---|---|---|---|
1 | Scott | 96300.00 | 0 |
2 | Sheffield | 87900.00 | 0.025 |
3 | Lull | 87900.00 | 0.025 |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |