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

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 мс.

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

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

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

Тип: Float32.

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

Пример

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

┌─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 │
└───────────────────────────────────────────────┘

quantilesTimingWeighted

То же, что и quantileTimingWeighted, но принимает несколько аргументов уровней квантилей и возвращает массив, содержащий значения этих квантилей.

Пример

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

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

Запрос:

SELECT quantilesTimingWeighted(0,5, 0.99)(response_time, weight) FROM t

Результат:

┌─quantilesTimingWeighted(0.5, 0.99)(response_time, weight)─┐
│ [112,162]                                                 │
└───────────────────────────────────────────────────────────┘

См. также