Kategorien:

Fensterfunktionen (Rangbezogen, Fensterrahmen)

PERCENT_RANK

Gibt den relativen Rang eines Wertes innerhalb einer Gruppe von Werten zurück. Die Angabe erfolgt als prozentualer Anteil im Wertebereich von 0,0 bis 1,0.

Syntax

PERCENT_RANK() OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <cumulativeRangeFrame> ] )
Copy

Wobei:

cumulativeRangeFrame ::=
    {
       RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
     | RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
    }
Copy

Nutzungshinweise

  • expr1 gibt die Spalte (oder den Ausdruck) an, nach der/dem die Partitionierung erfolgen soll.

    Angenommen, Sie möchten Landwirte der einzelnen Bundesstaaten oder Provinzen anhand der von ihnen produzierten Maismenge ordnen. In diesem Fall nehmen Sie eine Partitionierung anhand des Bundesstaats vor.

    Wenn Sie lediglich eine einzige Gruppe benötigen (z. B. Anordnen aller Landwirte in den USA unabhängig davon, in welchem Bundesstaat sie leben), lassen Sie die PARTITION BY-Klausel weg.

  • expr2 gibt die Spalte an, anhand der Sie die Rangfolge bestimmen möchten.

    Wenn Sie beispielsweise Landwirte sortieren möchten, um zu sehen, wer den meisten Mais produziert hat (im jeweiligen Bundesstaat), verwenden Sie die Spalte bushels_produced. Weitere Details dazu finden Sie unter Beispiele (unter diesem Thema).

  • PERCENT_RANK berechnet sich wie folgt:

    Wenn n gleich 1 ist:

    PERCENT_RANK = 0

    Wenn n größer als 1 ist:

    PERCENT_RANK = (r - 1) / (n - 1)

    Wobei r der RANK der Zeile ist und n die Anzahl der Zeilen in der Fensterpartition.

  • Der Wertebereich reichen von 0,0 bis 1,0. Sie können mit 100 multiplizieren, um einen wahren Prozentsatz zu erhalten.

  • PERCENT_RANK unterstützt bereichsbasierte kumulative Fensterrahmen, jedoch keine anderen Typen von Fensterrahmen. Weitere Informationen zur Syntax für bereichsbasierte, kumulative Fensterrahmen finden Sie unter Syntax und Nutzung von Fensterrahmen.

Beispiele

SELECT
  exchange,
  symbol,
  PERCENT_RANK() OVER (PARTITION BY exchange ORDER BY price) AS percent_rank
FROM trades;

+--------+------+------------+
|exchange|symbol|PERCENT_RANK|
+--------+------+------------+
|C       |SPY   |         0.0|
|C       |AAPL  |         0.5|
|C       |AAPL  |         1.0|
|N       |YHOO  |         0.0|
|N       |QQQ   |         0.2|
|N       |QQQ   |         0.4|
|N       |SPY   |         0.6|
|N       |SPY   |         0.6|
|N       |AAPL  |         1.0|
|Q       |YHOO  |         0.0|
|Q       |YHOO  |         0.2|
|Q       |MSFT  |         0.4|
|Q       |MSFT  |         0.6|
|Q       |QQQ   |         0.8|
|Q       |QQQ   |         1.0|
|P       |YHOO  |         0.0|
|P       |MSFT  |        0.25|
|P       |MSFT  |         0.5|
|P       |SPY   |        0.75|
|P       |AAPL  |         1.0|
+--------+------+------------+
Copy