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

quantileDeterministic

quantileDeterministic

引入于:v1.1

计算数值数据序列的近似分位数

该函数使用水库容量最多为 8192 的水库抽样以及确定性的抽样算法。 结果是确定性的。 若要获得精确分位数,请使用 quantileExact 函数。

在同一个查询中对不同分位等级(level)使用多个 quantile* 函数时,其内部状态不会被合并(也就是说,该查询的执行效率会低于理论上的最优效率)。 在这种情况下,请使用 quantiles 函数。

语法

quantileDeterministic(level)(expr, determinator)

别名: medianDeterministic

参数

  • level — 可选。分位数的水平。0 到 1 之间的常量浮点数。建议将 level 设置在 [0.01, 0.99] 范围内。默认值:0.5。当 level=0.5 时,函数计算中位数。Float*

参数说明

  • expr — 作用于列值的表达式,结果为数值数据类型、Date 或 DateTime。(U)Int*Float*Decimal*DateDateTime
  • determinator — 其哈希值在水库抽样算法中用于替代随机数生成器的数值,从而使采样结果具有确定性。作为 determinator,可以使用任意确定性的正数,例如用户 ID 或事件 ID。如果相同的 determinator 值出现过于频繁,函数可能产生不正确的结果。(U)Int*

返回值

返回指定水平的近似分位数。Float64DateDateTime

示例

计算确定性分位数

CREATE TABLE t (val UInt32) ENGINE = Memory;
INSERT INTO t VALUES (1), (1), (2), (3);

SELECT quantileDeterministic(val, 1) FROM t;
┌─quantileDeterministic(val, 1)─┐
│                           1.5 │
└───────────────────────────────┘

另请参阅