> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> quantilesGK fonctionne de manière similaire à quantileGK, mais permet de calculer simultanément des quantiles à différents niveaux et renvoie un Array.

# quantilesGK

<div id="quantilesGK">
  ## quantilesGK
</div>

Introduit dans : v23.4.0

Calcule simultanément plusieurs [quantiles](https://en.wikipedia.org/wiki/Quantile) d’une séquence de données numériques à différents niveaux à l’aide de l’algorithme de [Greenwald-Khanna](http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf).

Cette fonction est similaire à [`quantileGK`](/docs/fr/reference/functions/aggregate-functions/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**

```sql theme={null}
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*`](/docs/fr/reference/data-types/int-uint)
* `level` — Niveaux de quantiles. Un ou plusieurs nombres constants à virgule flottante compris entre 0 et 1. [`Float*`](/docs/fr/reference/data-types/float)

**Arguments**

* `expr` — Expression appliquée aux valeurs de la colonne, dont le résultat est de type numérique, `Date`, `DateTime` ou `DateTime64`. [`(U)Int*`](/docs/fr/reference/data-types/int-uint) ou [`Int128`](/docs/fr/reference/data-types/int-uint) ou [`UInt128`](/docs/fr/reference/data-types/int-uint) ou [`Int256`](/docs/fr/reference/data-types/int-uint) ou [`UInt256`](/docs/fr/reference/data-types/int-uint) ou [`Float*`](/docs/fr/reference/data-types/float) ou [`Decimal*`](/docs/fr/reference/data-types/decimal) ou [`Date`](/docs/fr/reference/data-types/date) ou [`DateTime`](/docs/fr/reference/data-types/datetime) ou [`DateTime64`](/docs/fr/reference/data-types/datetime64)

**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. Pour les types de données numériques, le format de sortie correspond au format d’entrée. [`Array((U)Int*)`](/docs/fr/reference/data-types/array) ou [`Array(Int128)`](/docs/fr/reference/data-types/array) ou [`Array(UInt128)`](/docs/fr/reference/data-types/array) ou [`Array(Int256)`](/docs/fr/reference/data-types/array) ou [`Array(UInt256)`](/docs/fr/reference/data-types/array) ou [`Array(Float*)`](/docs/fr/reference/data-types/array) ou [`Array(Decimal*)`](/docs/fr/reference/data-types/array) ou [`Array(Date)`](/docs/fr/reference/data-types/array) ou [`Array(DateTime)`](/docs/fr/reference/data-types/array) ou [`Array(DateTime64)`](/docs/fr/reference/data-types/array)

**Exemples**

**Calcul de plusieurs quantiles avec l'algorithme GK**

```sql title=Query theme={null}
SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
```

```response title=Response theme={null}
┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1, 1, 1]                                        │
└──────────────────────────────────────────────────┘
```

**Quantiles plus précis**

```sql title=Query theme={null}
SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
```

```response title=Response theme={null}
┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251, 498, 741]                                    │
└────────────────────────────────────────────────────┘
```
