跳到主要内容
跳到主要内容

quantileExact

精确计算数值数据序列的分位数

为了获得精确结果,所有传入的值会被合并到一个数组中,然后对该数组进行部分排序。因此,该函数会消耗 O(n) 的内存,其中 n 为传入值的数量。不过,在数据量较小时,该函数依然非常高效。

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

语法

quantileExact(level)(expr)

别名:medianExact

参数

  • level — 分位数的级别。可选参数。取值为 0 到 1 之间的常量浮点数。建议将 level 设置在 [0.01, 0.99] 范围内。默认值:0.5。 当 level=0.5 时,函数计算中位数
  • expr — 针对列值的表达式,结果为数值型数据类型DateDateTime

返回值

  • 指定级别的分位数。

类型:

  • 对于数值数据类型,输出格式与输入格式相同。例如:

SELECT
    toTypeName(quantileExact(number)) AS `quantile`,
    toTypeName(quantileExact(number::Int32)) AS `quantile_int32`,
    toTypeName(quantileExact(number::Float32)) AS `quantile_float32`,
    toTypeName(quantileExact(number::Float64)) AS `quantile_float64`,
    toTypeName(quantileExact(number::Int64)) AS `quantile_int64`
FROM numbers(1)
   ┌─quantile─┬─quantile_int32─┬─quantile_float32─┬─quantile_float64─┬─quantile_int64─┐
1. │ UInt64   │ Int32          │ Float32          │ Float64          │ Int64          │
   └──────────┴────────────────┴──────────────────┴──────────────────┴────────────────┘

1 row in set. Elapsed: 0.002 sec.
  • 如果输入值的类型为 Date,则结果类型为 Date
  • 如果输入值的类型为 DateTime,则结果类型为 DateTime

示例

查询:

SELECT quantileExact(number) FROM numbers(10)

结果:

┌─quantileExact(number)─┐
│                     5 │
└───────────────────────┘

另请参阅