quantilesTimingWeighted
引入版本:v1.1.0
在指定精度下,同时计算数值数据序列在不同级别上的多个分位数,并考虑序列中每个成员的权重。
此函数等同于 quantileTimingWeighted,但支持在一次遍历中计算多个分位数级别,因此比逐个调用单独的分位数函数更高效。
结果是确定性的 (即不依赖于查询处理顺序) 。该函数针对描述网页加载时间或后端响应时间等分布的序列进行了优化。
准确性
在以下情况下,计算结果是准确的:
- 值的总数不超过 5670。
- 值的总数超过 5670,但页面加载时间小于 1024 ms。
否则,计算结果会被舍入为最接近的 16 ms 倍数。
语法
quantilesTimingWeighted(level1, level2, ...)(expr, weight)参数
level— 分位数的级别。一个或多个介于 0 到 1 之间的常量浮点数。建议将level值设在[0.01, 0.99]范围内。Float*
参数说明
expr— 基于列值的表达式,结果为数值类型、Date或DateTime。如果向函数传入负值,其行为未定义。如果该值大于 30,000 (即页面加载时间超过 30 秒) ,则视为 30,000。(U)Int*或Float*或Date或DateTimeweight— 包含序列元素权重的列。权重表示该值出现的次数。UInt*
返回值
按指定级别返回的分位数组,顺序与这些级别的指定顺序相同。Array(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 quantilesTimingWeighted(0.5, 0.99)(response_time, weight) FROM t;┌─quantilesTimingWeighted(0.5, 0.99)(response_time, weight)─┐
│ [112,162] │
└───────────────────────────────────────────────────────────┘另请参阅