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

quantileTimingWeighted

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

Результат является детерминированным (не зависит от порядка обработки запроса). Функция оптимизирована для работы с последовательностями, описывающими распределения, например времени загрузки веб‑страниц или времени ответа бэкенда.

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

Синтаксис

quantileTimingWeighted(level)(expr, weight)

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

Аргументы

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

  • exprвыражение над значениями столбца, возвращающее число типа Float*.

    • Если в функцию передаются отрицательные значения, поведение функции не определено.
    • Если значение больше 30 000 (время загрузки страницы более 30 секунд), считается, что оно равно 30 000.
  • weight — столбец с весами элементов последовательности. Вес — это количество вхождений значения.

Точность

Вычисление является точным, если:

  • общее количество значений не превышает 5670;
  • общее количество значений превышает 5670, но время загрузки страницы меньше 1024 мс.

В противном случае результат вычисления округляется до ближайшего кратного 16 мс.

Примечание

Для вычисления квантилей времени загрузки страницы эта функция более эффективна и точна, чем quantile.

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

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

Тип: Float32.

Примечание

Если в функцию не передано ни одного значения (при использовании quantileTimingIf), возвращается NaN. Это позволяет отличать такие случаи от случаев, когда результатом является ноль. См. оператор ORDER BY для примечаний по сортировке значений NaN.

Пример

Входная таблица:

┌─response_time─┬─weight─┐
│            68 │      1 │
│           104 │      2 │
│           112 │      3 │
│           126 │      2 │
│           138 │      1 │
│           162 │      1 │
└───────────────┴────────┘

Запрос:

SELECT quantileTimingWeighted(response_time, weight) FROM t

Результат:

┌─quantileTimingWeighted(response_time, weight)─┐
│                                           112 │
└───────────────────────────────────────────────┘