跳转到主内容
跳转到主内容

quantileExactWeighted

quantileExactWeighted

引入版本:v1.1

精确计算数值数据序列的分位数,并考虑每个元素的权重。

为了获得精确值,所有传入的值会被组合成一个数组,然后对该数组进行部分排序。 每个值按照其权重计数,就好像它出现了 weight 次一样。 算法中使用了哈希表。 因此,如果传入的值频繁重复,该函数比 quantileExact 消耗更少的 RAM。 可以使用此函数替代 quantileExact,并将权重指定为 1。

在一个查询中使用多个具有不同 level 的 quantile* 函数时,其内部状态不会被合并(也就是说,该查询的执行效率低于本可达到的效率)。 在这种情况下,请使用 quantiles 函数。

语法

quantileExactWeighted(level)(expr, weight)

别名: medianExactWeighted

参数

  • 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

示例

计算精确加权分位数

CREATE TABLE t (
    n Int32,
    val Int32
) ENGINE = Memory;

-- Insert the sample data
INSERT INTO t VALUES
(0, 3),
(1, 2),
(2, 1),
(5, 4);

SELECT quantileExactWeighted(n, val) FROM t;
┌─quantileExactWeighted(n, val)─┐
│                             1 │
└───────────────────────────────┘

另请参阅