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或DateTime64的表达式。(U)Int*或Int128或UInt128或Int256或UInt256或Float*或Decimal*或Date或DateTime或DateTime64weight— 表示序列成员权重的列。权重表示值出现的次数。UInt*
返回值
指定级别的分位数。对于数值类型,输出格式与输入格式一致。(U)Int* 或 Int128 或 UInt128 或 Int256 或 UInt256 或 Float* 或 Decimal* 或 Date 或 DateTime 或 DateTime64
示例
计算插值加权分位数
CREATE TABLE t (
n Int32,
val UInt32
) ENGINE = Memory;
INSERT INTO t VALUES (0, 3), (1, 2), (2, 1), (5, 4);
SELECT quantileInterpolatedWeighted(n, val) FROM t;┌─quantileInterpolatedWeighted(n, val)─┐
│ 1 │
└──────────────────────────────────────┘另请参阅