跳转到主要内容

quantileInterpolatedWeighted

引入版本:v23.1.0 使用线性插值计算数值数据序列的分位数,并考虑每个元素的权重。 为了获得插值后的值,所有传入的值都会合并到一个数组中,然后按其对应的权重排序。 随后使用加权百分位数方法进行分位数插值:先基于权重构建累积分布,再结合权重和值执行线性插值,从而计算分位数。 当在一个查询中使用多个具有不同级别的 quantile* 函数时,内部状态不会合并 (也就是说,查询的效率会低于理论上的最佳水平) 。 在这种情况下,请使用 quantiles 函数。 语法
quantileInterpolatedWeighted(level)(expr, weight)
别名: medianInterpolatedWeighted 参数
  • level — 可选。分位数级别。取值为 0 到 1 之间的常量浮点数。建议将 level 设为 [0.01, 0.99] 范围内的值。默认值:0.5。当 level=0.5 时,此函数计算中位数。Float*
参数
  • expr — 基于列值计算得到数值类型、Date 或 DateTime 的表达式。(U)Int*Float*Decimal*DateDateTime
  • weight — 表示序列成员权重的列。权重表示值出现的次数。UInt*
返回值 指定级别的分位数。Float64DateDateTime 示例 计算插值加权分位数
Query
CREATE TABLE t (
    n Int32,
    val Int32
) ENGINE = Memory;

INSERT INTO t VALUES (0, 3), (1, 2), (2, 1), (5, 4);

SELECT quantileInterpolatedWeighted(n, val) FROM t;
Response
┌─quantileInterpolatedWeighted(n, val)─┐
│                                    1 │
└──────────────────────────────────────┘
另请参阅
最后修改于 2026年6月10日