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

quantileExactWeighted

quantileExactWeighted

Введена в версии v1.1

Точно вычисляет квантиль числовой последовательности данных с учётом веса каждого элемента.

Для получения точного значения все переданные значения объединяются в массив, который затем частично сортируется. Каждое значение учитывается с его весом, как если бы оно присутствовало weight раз. В алгоритме используется хеш-таблица. Благодаря этому, если передаваемые значения часто повторяются, функция потребляет меньше RAM, чем quantileExact. Вы можете использовать эту функцию вместо quantileExact и указать вес 1.

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

Синтаксис

quantileExactWeighted(level)(expr, weight)

Псевдонимы: medianExactWeighted

Параметры

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

Аргументы

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

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

Квантиль указанного уровня. Float64 или Date или DateTime

Примеры

Вычисление точного взвешенного квантиля

CREATE TABLE t (
    n Int32,
    val Int32
) ENGINE = Memory;

-- Insert the sample data
INSERT INTO t VALUES
(0, 3),
(1, 2),
(2, 1),
(5, 4);

SELECT quantileExactWeighted(n, val) FROM t;
┌─quantileExactWeighted(n, val)─┐
│                             1 │
└───────────────────────────────┘

См. также