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

quantilesGK

Добавленный в: v23.4.0 Вычисляет несколько квантилей числовой последовательности на разных уровнях одновременно с использованием алгоритма Greenwald-Khanna. Эта функция похожа на quantileGK, но позволяет вычислять несколько уровней квантилей за один проход, что эффективнее, чем вызывать отдельные функции квантилей. Алгоритм Greenwald-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
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]                                        │
└──────────────────────────────────────────────────┘
Более точные квантили
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]                                    │
└────────────────────────────────────────────────────┘
Последнее изменение 10 июня 2026 г.