Catégories :

Fonctions de fenêtre (Classement)

PERCENT_RANK

Renvoie le rang relatif d’une valeur dans un groupe de valeurs, sous la forme d’un pourcentage compris entre 0,0 et 1,0.

Syntaxe

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

Où :

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

Notes sur l’utilisation

  • expr1 spécifie la colonne (ou l’expression) à utiliser pour effectuer la partition.

    Par exemple, supposons que dans chaque état ou province, vous souhaitiez classer les agriculteurs par ordre de quantité de maïs produit. Dans ce cas, vous partitionnez par état.

    Si vous souhaitez un seul groupe (par exemple, vous souhaitez classer tous les agriculteurs des États-Unis, quel que soit l’état dans lequel ils vivent), omettez la clause PARTITION BY.

  • expr2 spécifie la colonne (ou l’expression) à utiliser pour le rang.

    Par exemple, si vous classez les agriculteurs pour voir qui produit le plus de maïs (dans leur état), utilisez la colonne bushels_produced. Pour plus de détails, voir Exemples (dans ce chapitre).

  • PERCENT_RANK est calculé comme suit :

    Si n est 1 :

    PERCENT_RANK = 0

    Si n est supérieur à 1 :

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

    r est le RANK de la ligne et n est le nombre de lignes dans la partition de la fenêtre.

  • Les valeurs vont de 0,0 à 1,0. Vous pouvez multiplier par 100 pour obtenir un vrai pourcentage.

  • PERCENT_RANK prend en charge les cadres de fenêtre basés sur une plage avec des limites fixes uniquement. Pour plus d’informations sur les cadres de fenêtre, y compris la syntaxe, les notes sur l’utilisation et les exemples, voir Syntaxe et utilisation des fonctions de fenêtre.

Exemples

SELECT
    exchange,
    symbol,
    PERCENT_RANK() OVER (PARTITION BY exchange ORDER BY price) AS percent_rank
  FROM trades;
Copy
+--------+------+------------+
|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|
+--------+------+------------+