Catégories :

Fonctions d’agrégation (estimation du centile), Fonctions de la fenêtre

APPROX_PERCENTILE

Renvoie une valeur approximative du centile désiré (c’est-à-dire si la colonne c a n nombres, alors APPROX_PERCENTILE(c, p) renvoie un nombre tel qu’environ n * p des nombres dans c sont plus petits que le nombre renvoyé).

Cette fonction utilise une version améliorée de l’algorithme t-Digest. Pour plus d’informations, voir Estimation des valeurs centiles.

Voir aussi :

APPROX_PERCENTILE_ACCUMULATE , APPROX_PERCENTILE_COMBINE , APPROX_PERCENTILE_ESTIMATE

Syntaxe

Fonction d’agrégation

APPROX_PERCENTILE( <expr> , <percentile> )
Copy

Fonction de fenêtre

APPROX_PERCENTILE( <expr> , <percentile> ) OVER ( [ PARTITION BY <expr3> ] )
Copy

Arguments

expr

Une expression valide, telle qu’un nom de colonne, qui donne une valeur numérique.

percentile

Une valeur réelle constante supérieure ou égale à 0.0 et inférieure à 1.0. Cela indique le centile (de 0 à 99,999 …). Par exemple La valeur 0,65 indique le 65e centile.

expr3

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

Renvoie

La sortie est renvoyée sous forme de valeur DOUBLE.

Notes sur l’utilisation

  • Le centile ne fonctionne que sur les valeurs numériques. Par conséquent, expr doit générer des valeurs numériques ou être convertie en nombres.

  • Les valeurs renvoyées ne figurent pas nécessairement dans l’ensemble de données.

  • La valeur renvoyée est une approximation. La taille de l’ensemble de données et l’asymétrie de celui-ci ont une incidence sur la précision de l’approximation.

  • 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

Démontrer la fonction APPROX_PERCENTILE :

Créer et remplir une table avec des valeurs :

CREATE TABLE testtable (c1 INTEGER);
INSERT INTO testtable (c1) VALUES 
    (0),
    (1),
    (2),
    (3),
    (4),
    (5),
    (6),
    (7),
    (8),
    (9),
    (10);
Copy

Exécuter des requêtes et afficher le résultat :

SELECT APPROX_PERCENTILE(c1, 0.1) FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.1) |
|----------------------------|
|                        1.5 |
+----------------------------+
Copy
SELECT APPROX_PERCENTILE(c1, 0.5) FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.5) |
|----------------------------|
|                        5.5 |
+----------------------------+
Copy

Noter que la valeur renvoyée dans ce cas est supérieure à toute valeur figurant réellement dans l’ensemble de données :

SELECT APPROX_PERCENTILE(c1, 0.999) FROM testtable;
+------------------------------+
| APPROX_PERCENTILE(C1, 0.999) |
|------------------------------|
|                         10.5 |
+------------------------------+
Copy