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

quantileExactExclusive

quantileExactExclusive

引入版本:v20.1

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

该函数等价于 quantileExact,但使用“排他式”方法计算分位数,即 R-6 方法中所描述的方式。

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

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

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

语法

quantileExactExclusive(level)(expr)

参数

  • level — 分位数的 level(分位水平)。取值为 0 到 1 之间的常量浮点数(不包含 0 和 1)。我们建议使用范围在 (0.01, 0.99)level 值。Float*

参数说明

返回值

返回指定 level 的分位数值。Float64

示例

计算精确的排他型分位数

SELECT quantileExactExclusive(0.25)(number) FROM numbers(5);
┌─quantileExactExclusive(0.25)(number)─┐
│                                  0.5 │
└──────────────────────────────────────┘

计算多个分位点

SELECT quantileExactExclusive(0.1)(number), quantileExactExclusive(0.9)(number) FROM numbers(10);
┌─quantileExactExclusive(0.1)(number)─┬─quantileExactExclusive(0.9)(number)─┐
│                                 0.4 │                                 8.6 │
└─────────────────────────────────────┴─────────────────────────────────────┘