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

 

PERCENT_RANK-Funktion

Ä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 spezifiziert 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).

Beispiel 1

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.

Beispiel 2

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
Obere und untere Prozentsätze mit PERCENT_RANK finden

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

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