La fonction PERCENTILE_DISC calcule une valeur de centile spécifique. Elle trie les valeurs d'une colonne spécifiée par ordre croissant et renvoie la première valeur dont la distribution cumulative est supérieure ou égale au centile indiqué.
PERCENTILE_DISC est à la fois une fonction d'agrégation et une fonction de fenêtrage.
Syntaxe
-- Aggregate function
PERCENTILE_DISC(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>])
-- Window function
PERCENTILE_DISC(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>]) OVER ([partition_clause] [orderby_clause])
Paramètres
|
Parameter |
Required |
Type |
Description |
|
|
Yes |
— |
Colonne contenant des valeurs triables. |
|
|
Yes |
DOUBLE constant |
Centile cible, compris dans l'intervalle [0, 1]. |
|
|
No |
Boolean constant |
Indique s'il faut ignorer les valeurs NULL. Valeur par défaut : |
|
|
— |
— |
Consultez la section Window Functions Overview. |
Valeur de retour
Renvoie la valeur du centile. Le type de données correspond à celui de la colonne col_name.
Exemples
Exemple 1 : Calculer les valeurs de centile en ignorant les valeurs NULL (comportement par défaut)
SELECT
x,
PERCENTILE_DISC(x, 0) OVER() AS min,
PERCENTILE_DISC(x, 0.5) OVER() AS median,
PERCENTILE_DISC(x, 1) OVER() AS max
FROM VALUES('c'),(NULL),('b'),('a') AS tbl(x);
Résultat :
+------------+------------+------------+------------+
| x | min | median | max |
+------------+------------+------------+------------+
| c | a | b | c |
| NULL | a | b | c |
| b | a | b | c |
| a | a | b | c |
+------------+------------+------------+------------+
Les valeurs NULL sont exclues du tri. Les trois valeurs non NULL a, b et c sont triées par ordre croissant. Le 0e centile correspond donc à a, le 50e centile à b et le 100e centile à c.
Exemple 2 : Calculer les valeurs de centile en traitant les valeurs NULL comme minimales
SELECT
x,
PERCENTILE_DISC(x, 0, false) OVER() AS min,
PERCENTILE_DISC(x, 0.5, false) OVER() AS median,
PERCENTILE_DISC(x, 1, false) OVER() AS max
FROM VALUES('c'),(NULL),('b'),('a') AS tbl(x);
Résultat :
+------------+------------+------------+------------+
| x | min | median | max |
+------------+------------+------------+------------+
| c | NULL | a | c |
| NULL | NULL | a | c |
| b | NULL | a | c |
| a | NULL | a | c |
+------------+------------+------------+------------+
Lorsque le paramètre isIgnoreNull est défini sur false, les valeurs NULL sont classées avant a, b et c. Le 0e centile devient alors NULL et le 50e centile passe de b à a.