Catégories :

Fonctions d’agrégation (général), Fonctions de la fenêtre

PERCENTILE_DISC

Renvoie une valeur de centile basée sur une distribution discrète de la colonne d’entrée (spécifiée dans classer_par_expr). La valeur renvoyée est celle dont la ligne a la plus petite valeur CUME_DIST supérieure ou égale au centile donné. Les valeurs NULL sont ignorées dans le calcul.

Voir aussi :

PERCENTILE_CONT

Syntaxe

Fonction d’agrégation

PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> )

Fonction de fenêtre

PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> ) OVER ( [ PARTITION BY <expr3> ] )

Arguments

centile

Le centile de la valeur que vous voulez trouver. Le centile doit être une constante entre 0,0 et 1,0. Par exemple, si vous souhaitez trouver la valeur au 90e centile, spécifiez 0,9.

classer_par_expr

L’expression (généralement un nom de colonne) permettant de classer les valeurs. Par exemple, si vous souhaitez rechercher l’élève dont le score mathématique SAT se situe au 90e centile, spécifiez la colonne contenant le score mathématique SAT.

Notez qu’il s’agit également implicitement de la colonne à partir de laquelle la valeur renvoyée est choisie. Par exemple, si vous effectuez un classement par scores mathématiques SAT, le résultat que vous obtiendrez sera l’un des scores mathématiques SAT. Vous ne pouvez pas effectuer de classement par colonne et obtenir une valeur de centile pour une colonne différente.

expr3

Il s’agit de l’expression facultative utilisée pour grouper des lignes dans des partitions.

Renvoie

Renvoie la valeur correspondant au centile spécifié.

Notes sur l’utilisation

  • L’argument centile de la fonction doit être une constante.

  • DISTINCT n’est pas pris en charge pour cette fonction.

  • La fonction PERCENTILE_CONT interpole entre les deux valeurs les plus proches, tandis que la fonction PERCENTILE_DISC choisit la valeur la plus proche plutôt que l’interpolation.

  • Lorsqu’il est utilisé comme une fonction de fenêtre :

    • Cette fonction ne prend pas en charge :

      • Sous-clause ORDER BY dans la clause OVER().

      • Cadres de fenêtre.

Exemples

L’exemple suivant montre les valeurs au 25e centile (0,25) dans différents groupes :

Créer et remplir une table avec des valeurs :

create or replace table aggr(k int, v decimal(10,2));
insert into aggr (k, v) values
    (0,  0),
    (0, 10),
    (0, 20),
    (0, 30),
    (0, 40),
    (1, 10),
    (1, 20),
    (2, 10),
    (2, 20),
    (2, 25),
    (2, 30),
    (3, 60),
    (4, NULL);

Exécutez une requête et affichez la sortie :

select k, percentile_disc(0.25) within group (order by v) 
  from aggr 
  group by k
  order by k;
+---+-------------------------------------------------+
| K | PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY V) |
|---+-------------------------------------------------|
| 0 |                                           10.00 |
| 1 |                                           10.00 |
| 2 |                                           10.00 |
| 3 |                                           60.00 |
| 4 |                                            NULL |
+---+-------------------------------------------------+