跳到主要内容
跳到主要内容

quantileExactWeighted

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

为了获得精确值,所有传入的值被组合成一个数组,然后部分排序。每个值的计数与其权重相结合,仿佛它出现了 weight 次。算法中使用了哈希表。因此,如果传入的值频繁重复,该函数消耗的内存比 quantileExact 更少。您可以使用此函数替代 quantileExact 并指定权重为 1。

在查询中使用多个不同层级的 quantile* 函数时,内部状态不会合并(即,查询的效率低于预期)。在这种情况下,请使用 quantiles 函数。

语法

quantileExactWeighted(level)(expr, weight)

别名: medianExactWeighted

参数

  • level — 分位数层级。可选参数。0 到 1 之间的常数浮点数。我们建议使用的 level 值范围为 [0.01, 0.99]。默认值: 0.5。在 level=0.5 时,函数计算中位数
  • expr — 生成数字数据类型的列值表达式,支持日期日期时间
  • weight — 序列成员的权重列。权重是具有无符号整数类型的值出现次数。

返回值

  • 指定层级的分位数。

类型:

  • 对于输入为数字数据类型:Float64
  • 如果输入值类型为 Date,则返回日期
  • 如果输入值类型为 DateTime,则返回日期时间

示例

输入表:

┌─n─┬─val─┐
│ 0 │   3 │
│ 1 │   2 │
│ 2 │   1 │
│ 5 │   4 │
└───┴─────┘

查询:

SELECT quantileExactWeighted(n, val) FROM t

结果:

┌─quantileExactWeighted(n, val)─┐
│                             1 │
└───────────────────────────────┘

另请参阅