跳转到主要内容

quantileExactWeighted

引入版本:v1.1.0 精确计算数值数据序列的分位数,并考虑每个元素的权重。 为了得到精确值,所有传入的值都会汇总到一个数组中,然后对其进行部分排序。 每个值都会按照其权重进行计数,就像它实际出现了 weight 次一样。 该算法使用了哈希表。 因此,如果传入的值经常重复,与 quantileExact 相比,该函数消耗的 RAM 更少。 你也可以用此函数替代 quantileExact,并将权重指定为 1。 如果在一个查询中使用多个级别不同的 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 示例 计算精确加权分位数
Query
CREATE TABLE t (
    n Int32,
    val Int32
) ENGINE = Memory;

-- 插入示例数据
INSERT INTO t VALUES
(0, 3),
(1, 2),
(2, 1),
(5, 4);

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