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

quantileExactInclusive

quantileExactInclusive

引入版本:v20.1

quantileExact 类似,它计算数值数据序列的精确分位数

此函数等价于 quantileExact,但使用包含式方法来计算分位数,具体如 R-7 方法所述。

使用此函数时,分位数的计算方式使得给定分位数 p 的插值公式为:x[floor((n-1)*p)] + ((n-1)*p - floor((n-1)*p)) * (x[floor((n-1)*p)+1] - x[floor((n-1)*p)]),其中 x 是已排序数组。

为了获得精确值,所有传入的值会被合并为一个数组,然后对该数组进行完整排序。 排序算法的复杂度为 O(N·log(N)),其中 N = std::distance(first, last) 次比较。

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

语法

quantileExactInclusive(level)(expr)

参数

  • level — 分位数的级别。取值为 0 到 1(含)的常量浮点数。建议将 level 设置在 [0.01, 0.99] 范围内。Float*

参数列表

返回值

返回指定级别的分位数值。Float64

示例

计算精确的端点包含型分位数

SELECT quantileExactInclusive(0.25)(number) FROM numbers(5);
┌─quantileExactInclusive(0.25)(number)─┐
│                                    1 │
└──────────────────────────────────────┘

计算多个分位点

SELECT quantileExactInclusive(0.1)(number), quantileExactInclusive(0.9)(number) FROM numbers(10);
┌─quantileExactInclusive(0.1)(number)─┬─quantileExactInclusive(0.9)(number)─┐
│                                 0.9 │                                 8.1 │
└─────────────────────────────────────┴─────────────────────────────────────┘