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

quantileExactHigh

Аналогично quantileExact, вычисляет точный квантиль числовой последовательности данных.

Все переданные значения объединяются в массив, который затем полностью сортируется для получения точного значения квантиля. Сложность алгоритма сортировки составляет O(N·log(N)), где выполняется N = std::distance(first, last) сравнений.

Возвращаемое значение зависит от уровня квантиля и числа элементов в выборке, то есть если уровень равен 0.5, функция возвращает большее из двух медианных значений для чётного числа элементов и медианное (центральное) значение для нечётного числа элементов. Медиана вычисляется аналогично реализации median_high, которая используется в Python. Для всех остальных уровней возвращается элемент по индексу, соответствующему значению level * size_of_array.

Данная реализация ведёт себя точно так же, как текущая реализация quantileExact.

При использовании нескольких функций quantile* с разными уровнями в запросе их внутренние состояния не объединяются (то есть запрос работает менее эффективно, чем мог бы). В этом случае используйте функцию quantiles.

Синтаксис

quantileExactHigh(level)(expr)

Псевдоним: medianExactHigh.

Аргументы

  • level — Уровень квантиля. Необязательный параметр. Константное число с плавающей запятой от 0 до 1. Рекомендуется использовать значение level в диапазоне [0.01, 0.99]. Значение по умолчанию: 0.5. При level=0.5 функция вычисляет медиану.
  • expr — Выражение над значениями в столбце, результатом которого являются числовые типы данных, Date или DateTime.

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

  • Квантиль заданного уровня.

Тип:

  • Float64 для числового типа данных на входе.
  • Date если входные значения имеют тип Date.
  • DateTime если входные значения имеют тип DateTime.

Пример

Запрос:

SELECT quantileExactHigh(number) FROM numbers(10)

Результат:

┌─quantileExactHigh(number)─┐
│                         5 │
└───────────────────────────┘