La fonction PERCENTILE_DISC calcule une valeur de percentile spécifique. Elle trie les valeurs d'une colonne donnée par ordre croissant et renvoie la première valeur dont la distribution cumulative est supérieure ou égale au percentile spécifié.
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
|
Paramètre |
Obligatoire |
Type |
Description |
|
|
Oui |
— |
Nom de la colonne contenant des valeurs triables. |
|
|
Oui |
Constante DOUBLE |
Valeur du percentile cible, comprise dans l'intervalle [0, 1]. |
|
|
Non |
Constante booléenne |
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 percentile. Le type de données correspond à celui de la colonne col_name.
Exemples
Exemple 1 : Calculer les percentiles 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 nulles a, b et c sont triées par ordre croissant. Par conséquent, le 0e percentile correspond à a, le 50e percentile à b et le 100e percentile à c.
Exemple 2 : Calculer les percentiles 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 percentile devient alors NULL, tandis que le 50e percentile passe de b à a.