Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileExactWeightedInterpolated

quantileExactWeightedInterpolated

Добавленный в: v24.10.0

Вычисляет квантиль числовой последовательности данных с помощью линейной интерполяции с учетом веса каждого элемента.

Чтобы получить интерполированное значение, все переданные значения объединяются в массив, после чего элементы сортируются по соответствующим весам. Затем интерполяция квантилей выполняется с использованием метода взвешенного процентиля: строится кумулятивное распределение на основе весов, а затем по весам и значениям выполняется линейная интерполяция для вычисления квантилей.

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

Мы настоятельно рекомендуем использовать quantileExactWeightedInterpolated вместо quantileInterpolatedWeighted, поскольку quantileExactWeightedInterpolated точнее, чем quantileInterpolatedWeighted. Подробнее см. в примере ниже.

Синтаксис

quantileExactWeightedInterpolated(level)(expr, weight)

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

Параметры

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

Аргументы

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

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

Квантиль указанного уровня. Числовые аргументы возвращают Float64, а аргументы Decimal, Date, DateTime и DateTime64 сохраняют исходный формат. Float64 или Decimal* или Date или DateTime или DateTime64

Примеры

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

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

INSERT INTO t VALUES (0, 3), (1, 2), (2, 1), (5, 4);

SELECT quantileExactWeightedInterpolated(n, val) FROM t;
┌─quantileExactWeightedInterpolated(n, val)─┐
│                                       1.5 │
└───────────────────────────────────────────┘

Предпочитайте quantileExactWeightedInterpolated вместо quantileInterpolatedWeighted

SELECT
    quantileExactWeightedInterpolated(0.99)(number, 1),
    quantile(0.99)(number),
    quantileInterpolatedWeighted(0.99)(number, 1)
FROM numbers(9)
┌─quantileExactWeightedInterpolated(0.99)(number, 1)─┬─quantile(0.99)(number)─┬─quantileInterpolatedWeighted(0.99)(number, 1)─┐
│                                               7.92 │                   7.92 │                                             8 │
└────────────────────────────────────────────────────┴────────────────────────┴───────────────────────────────────────────────┘

См. также

Navigation