Passer au contenu principal

quantilesGK

Introduit dans : v23.4.0 Calcule simultanément plusieurs quantiles d’une séquence de données numériques à différents niveaux à l’aide de l’algorithme de Greenwald-Khanna. Cette fonction est similaire à quantileGK, mais elle permet de calculer plusieurs niveaux de quantile en un seul passage, ce qui est plus efficace que d’appeler des fonctions de quantile séparées. L’algorithme de Greenwald-Khanna sert à calculer des quantiles sur un flux de données de manière très efficace. Il a été présenté par Michael Greenwald et Sanjeev Khanna en 2001. L’algorithme est très efficace, n’utilisant que O(log n) en espace et O(log log n) en temps par élément (où n correspond à la taille de l’entrée). Il est également très précis et fournit des valeurs de quantile approximatives avec une précision contrôlable. Syntaxe
quantilesGK(accuracy, level1, level2, ...)(expr)
Paramètres
  • accuracy — Précision des quantiles. Entier positif constant. Une valeur de précision plus élevée signifie une erreur plus faible. Par exemple, si l’argument accuracy est défini sur 100, les quantiles calculés auront une erreur ne dépassant pas 1 % avec une forte probabilité. Il existe un compromis entre la précision des quantiles calculés et la complexité de calcul de l’algorithme. UInt*
  • level — Niveaux de quantiles. Un ou plusieurs nombres constants à virgule flottante compris entre 0 et 1. Float*
Arguments
  • expr — Expression appliquée aux valeurs de la colonne, dont le résultat est de type numérique, Date ou DateTime. (U)Int* ou Float* ou Decimal* ou Date ou DateTime
Valeur renvoyée Array de quantiles correspondant aux niveaux spécifiés, dans le même ordre que celui dans lequel ils ont été spécifiés. Array(Float64) ou Array(Date) ou Array(DateTime) Exemples Calcul de plusieurs quantiles avec l’algorithme GK
Query
SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
Response
┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1, 1, 1]                                        │
└──────────────────────────────────────────────────┘
Quantiles plus précis
Query
SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
Response
┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251, 498, 741]                                    │
└────────────────────────────────────────────────────┘
Dernière modification le 25 juin 2026