Catégories :

Fonctions de la fenêtre (en lien avec le rang, cadre de fenêtre)

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 } ] [ <cumulativeRangeFrame> ] )
Copy

Où :

cumulativeRangeFrame ::=
    {
       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 cumulatifs basés sur des plages mais pas les autres types de cadres de fenêtre. Pour plus d’informations sur la syntaxe des cadres de fenêtre cumulatifs basés des plages, consultez Syntaxe et utilisation du cadre de fenêtre.

Exemples

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