Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantilesTDigestWeighted

quantilesTDigestWeighted

引入版本:v20.1.0

使用 t-digest 算法,同时计算数值数据序列在不同级别上的多个近似分位数。 该函数会将序列中每个成员的权重纳入计算。

此函数等同于 quantileTDigestWeighted,但支持在一次遍历中计算多个分位数级别,因此比逐个调用分位数函数更高效。

最大误差为 1%。内存消耗为 log(n),其中 n 是值的数量。

该函数的性能低于 quantilesquantilesTiming。 但从状态大小与精度的比率来看,此函数明显优于 quantiles

结果取决于查询的运行顺序,因此是非确定性的。

语法

quantilesTDigestWeighted(level1, level2, ...)(expr, weight)

参数

  • level — 分位数的级别。一个或多个介于 0 到 1 之间的常量浮点数。建议将 level 的值设在 [0.01, 0.99] 范围内。Float*

参数说明

  • expr — 基于列值计算的表达式,结果类型为数值数据类型、DateDateTime(U)Int*Float*DateDateTime
  • weight — 包含序列中各元素权重的列。权重表示某个值出现的次数。UInt*

返回值

返回按指定级别顺序排列的近似分位数组。对于 DateDateTime 输入,输出格式与输入格式一致。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]                                           │
└──────────────────────────────────────────────────────┘
Navigation