Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileExactExclusive

quantileExactExclusive

引入版本:v20.1.0

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

此函数等价于 quantileExact,但采用 exclusive 方法计算分位数,如 R-6 method 所述。

使用此函数时,分位数的计算方式如下:对于给定分位数 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)

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

语法

quantileExactExclusive(level)(expr)

参数

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

参数

  • expr — 基于列值的表达式,结果必须为数值类型、DateDateTime(U)Int*Float*DateDateTime

返回值

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

示例

计算精确排他分位数

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

计算多个 quantile 级别

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