Перейти к основному содержимому
Перейти к основному содержимому

quantilesGK

quantilesGK

Появилась в версии: v23.4

Вычисляет несколько квантилей числовой последовательности данных на разных уровнях одновременно, используя алгоритм Greenwald-Khanna.

Эта функция работает аналогично quantileGK, но позволяет вычислять несколько уровней квантилей за один проход, что эффективнее, чем вызывать отдельные функции квантилей.

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

Синтаксис

quantilesGK(accuracy, level1, level2, ...)(expr)

Параметры

  • accuracy — Точность квантилей. Положительное целое константное число. Более высокое значение точности означает меньшую погрешность. Например, если аргумент accuracy имеет значение 100, вычисленные квантили будут иметь погрешность не более 1% с высокой вероятностью. Существует компромисс между точностью вычисленных квантилей и вычислительной сложностью алгоритма. UInt*
  • level — Уровни квантилей. Одно или несколько константных чисел с плавающей запятой от 0 до 1. Float*

Аргументы

  • expr — Выражение над значениями столбца, результатом которого являются числовые типы данных, Date или DateTime. (U)Int* или Float* или Decimal* или Date или DateTime

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

Массив квантилей заданных уровней в том же порядке, в котором были заданы уровни. Array(Float64) или Array(Date) или Array(DateTime)

Примеры

Вычисление нескольких квантилей с помощью алгоритма GK

SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1, 1, 1]                                        │
└──────────────────────────────────────────────────┘

Квантили с повышенной точностью

SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);
┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251, 498, 741]                                    │
└────────────────────────────────────────────────────┘