quantilesTDigestWeighted
引入版本:v20.1.0
使用 t-digest 算法,同时计算数值数据序列在不同级别上的多个近似分位数。 该函数会将序列中每个成员的权重纳入计算。
此函数等同于 quantileTDigestWeighted,但支持在一次遍历中计算多个分位数级别,因此比逐个调用分位数函数更高效。
最大误差为 1%。内存消耗为 log(n),其中 n 是值的数量。
该函数的性能低于 quantiles 和 quantilesTiming。
但从状态大小与精度的比率来看,此函数明显优于 quantiles。
结果取决于查询的运行顺序,因此是非确定性的。
语法
quantilesTDigestWeighted(level1, level2, ...)(expr, weight)参数
level— 分位数的级别。一个或多个介于 0 到 1 之间的常量浮点数。建议将level的值设在[0.01, 0.99]范围内。Float*
参数说明
expr— 基于列值计算的表达式,结果类型为数值数据类型、Date或DateTime。(U)Int*或Float*或Date或DateTimeweight— 包含序列中各元素权重的列。权重表示某个值出现的次数。UInt*
返回值
返回按指定级别顺序排列的近似分位数组。对于 Date 和 DateTime 输入,输出格式与输入格式一致。Array(Float32) 或 Array(Date) 或 Array(DateTime)
示例
使用 t-digest 计算多个加权分位数
SELECT quantilesTDigestWeighted(0.25, 0.5, 0.75)(number, 1) FROM numbers(100);┌─quantilesTDigestWeighted(0.25, 0.5, 0.75)(number, 1)─┐
│ [24,49,74] │
└──────────────────────────────────────────────────────┘