Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileExactInclusive

quantileExactInclusive

Introduced in:v20.1.0

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

该函数等同于 quantileExact,但采用包含端点的分位数计算方法,如 R-7 method 中所述。

使用此函数时,分位数的计算满足如下形式:对于给定分位数 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),即比较次数。

当在同一查询中使用多个不同级别的 quantile* 函数时,内部状态不会合并 (也就是说,查询的效率会低于原本可达到的水平) 。 在这种情况下,请使用 quantiles 函数。

Syntax

quantileExactInclusive(level)(expr)

参数

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

Arguments

  • expr — 针对列值的表达式,结果必须为数值 data types、DateDateTime(U)Int*Float*DateDateTime

返回值

返回指定级别的分位数。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.8999999999999999 │                                 8.1 │
└─────────────────────────────────────┴─────────────────────────────────────┘
Navigation