Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileTimingWeighted

quantileTimingWeighted

首次引入于:v1.1.0

以指定精度,根据数值数据序列中每个成员的权重计算该序列的分位数

结果是确定性的 (即不依赖于查询处理顺序) 。该函数针对描述网页加载时间或后端响应时间这类分布的序列进行了优化。

如果在同一查询中使用多个 level 不同的 quantile* 函数,它们的内部状态不会合并 (也就是说,查询的执行效率会低于原本可达到的水平) 。在这种情况下,请使用 quantiles 函数。

精度

在以下情况下,计算结果是精确的:

  • 值的总数不超过 5670。
  • 值的总数超过 5670,但页面加载时间小于 1024 ms。

否则,计算结果会被舍入为最接近的 16 ms 倍数。

语法

quantileTimingWeighted(level)(expr, weight)

别名: medianTimingWeighted

参数

  • level — 可选。分位数级别。取值为 0 到 1 之间的常量浮点数。建议将 level 设为 [0.01, 0.99] 范围内的值。默认值:0.5。当 level=0.5 时,此函数计算中位数。Float*

Arguments

  • expr — 作用于列值并产生数值数据类型、DateDateTime 的表达式。如果向函数传入负值,则其行为未定义。如果该值大于 30,000 (页面加载时间超过 30 秒) ,则按 30,000 处理。(U)Int*Float*DateDateTime
  • weight — 表示序列元素权重的列。权重即该值出现的次数。UInt*

返回值

指定级别的分位数。Float32

示例

计算加权时延分位数

CREATE TABLE t (response_time UInt32, weight UInt32) ENGINE = Memory;
INSERT INTO t VALUES (68, 1), (104, 2), (112, 3), (126, 2), (138, 1), (162, 1);

SELECT quantileTimingWeighted(response_time, weight) FROM t;
┌─quantileTimingWeighted(response_time, weight)─┐
│                                           112 │
└───────────────────────────────────────────────┘
Navigation