> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> quantilesGK работает аналогично quantileGK, но позволяет одновременно вычислять значения на разных уровнях и возвращает массив.

# quantilesGK

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

Добавленный в: v23.4.0

Вычисляет несколько [квантилей](https://en.wikipedia.org/wiki/Quantile) числовой последовательности на разных уровнях одновременно с использованием алгоритма [Greenwald-Khanna](http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf).

Эта функция похожа на [`quantileGK`](/ru/reference/functions/aggregate-functions/quantileGK), но позволяет вычислять несколько уровней квантилей за один проход, что эффективнее, чем вызывать отдельные функции квантилей.

Алгоритм Greenwald-Khanna используется для очень эффективного вычисления квантилей в потоке данных.
Он был предложен Майклом Гринвальдом и Сандживом Ханной в 2001 году.
Алгоритм очень эффективен: для каждого элемента требуется лишь O(log n) памяти и O(log log n) времени (где n — размер входных данных).
Он также отличается высокой точностью, обеспечивая приблизительные значения квантилей с управляемой точностью.

**Синтаксис**

```sql theme={null}
quantilesGK(accuracy, level1, level2, ...)(expr)
```

**Параметры**

* `accuracy` — Точность квантилей. Константное положительное целое число. Чем больше значение точности, тем меньше ошибка. Например, если аргумент `accuracy` задан равным 100, вычисленные квантили будут иметь ошибку не более 1% с высокой вероятностью. Между точностью вычисляемых квантилей и вычислительной сложностью алгоритма приходится искать компромисс. [`UInt*`](/ru/reference/data-types/int-uint)
* `level` — Уровни квантилей. Одно или несколько константных чисел с плавающей запятой в диапазоне от 0 до 1. [`Float*`](/ru/reference/data-types/float)

**Аргументы**

* `expr` — Выражение над значениями столбца, результатом вычисления которого являются числовые типы данных, Date или DateTime. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`Date`](/ru/reference/data-types/date) или [`DateTime`](/ru/reference/data-types/datetime)

**Возвращаемое значение**

Массив квантилей указанных уровней в том же порядке, в котором эти уровни были заданы. [`Array(Float64)`](/ru/reference/data-types/array) или [`Array(Date)`](/ru/reference/data-types/array) или [`Array(DateTime)`](/ru/reference/data-types/array)

**Примеры**

**Вычисление нескольких квантилей с помощью алгоритма 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]                                        │
└──────────────────────────────────────────────────┘
```

**Более точные квантили**

```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]                                    │
└────────────────────────────────────────────────────┘
```
