Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileExactHigh

quantileExactHigh

Introduced in: v20.8.0

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

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

返回值取决于分位数级别和所选元素的数量。也就是说,当级别为 0.5 时,如果元素个数为偶数,则函数返回较大的中位数值;如果元素个数为奇数,则返回中间的中位数值。 中位数的计算方式与 Python 中使用的 median_high 实现类似。

对于其他所有级别,返回索引对应于 level * size_of_array 的元素。

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

Syntax

quantileExactHigh(level)(expr)

别名: medianExactHigh

参数

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

Arguments

返回值

返回指定级别的分位数。对于数值数据类型,输出格式与输入格式一致。(U)Int*Float*Decimal*DateDateTimeDateTime64

示例

计算精确高分位数

SELECT quantileExactHigh(number) FROM numbers(10);
┌─quantileExactHigh(number)─┐
│                         5 │
└───────────────────────────┘

计算特定分位点

SELECT quantileExactHigh(0.1)(number) FROM numbers(10);
┌─quantileExactHigh(0.1)(number)─┐
│                              1 │
└────────────────────────────────┘
Navigation