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

quantiles functions

quantiles

语法: quantiles(level1, level2, ...)(x)

所有的分位数函数也都有对应的分位数函数: quantiles, quantilesDeterministic, quantilesTiming, quantilesTimingWeighted, quantilesExact, quantilesExactWeighted, quantileExactWeightedInterpolated, quantileInterpolatedWeighted, quantilesTDigest, quantilesBFloat16, quantilesDD。这些函数在一次运行中计算出所有列出的级别的分位数,并返回结果值的数组。

quantilesExactExclusive

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

为了获取确切值,所有传入的值被合并成一个数组,然后进行部分排序。因此,该函数消耗 O(n) 的内存,其中 n 是传入值的数量。然而,对于少量值,该函数非常有效。

此函数等价于 Excel 函数 PERCENTILE.EXC,(type R6)。

quantileExactExclusive 相比,它在处理级别集时更高效。

语法

quantilesExactExclusive(level1, level2, ...)(expr)

参数

参数说明

  • level — 分位数的级别。可能的值: (0, 1) — 不包括边界。 Float

返回值

  • 指定级别的 Array 的分位数。

数组值的类型:

  • 对于数字数据类型输入,为 Float64
  • 如果输入值具有 Date 类型,则为 Date
  • 如果输入值具有 DateTime 类型,则为 DateTime

示例

查询:

CREATE TABLE num AS numbers(1000);

SELECT quantilesExactExclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x) FROM (SELECT number AS x FROM num);

结果:

┌─quantilesExactExclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x)─┐
│ [249.25,499.5,749.75,899.9,949.9499999999999,989.99,998.999]        │
└─────────────────────────────────────────────────────────────────────┘

quantilesExactInclusive

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

为了获取确切值,所有传入的值被合并成一个数组,然后进行部分排序。因此,该函数消耗 O(n) 的内存,其中 n 是传入值的数量。然而,对于少量值,该函数非常有效。

此函数等价于 Excel 函数 PERCENTILE.INC,(type R7)。

quantileExactInclusive 相比,它在处理级别集时更高效。

语法

quantilesExactInclusive(level1, level2, ...)(expr)

参数

参数说明

  • level — 分位数的级别。可能的值: [0, 1] — 包括边界。 Float

返回值

  • 指定级别的 Array 的分位数。

数组值的类型:

  • 对于数字数据类型输入,为 Float64
  • 如果输入值具有 Date 类型,则为 Date
  • 如果输入值具有 DateTime 类型,则为 DateTime

示例

查询:

CREATE TABLE num AS numbers(1000);

SELECT quantilesExactInclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x) FROM (SELECT number AS x FROM num);

结果:

┌─quantilesExactInclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x)─┐
│ [249.75,499.5,749.25,899.1,949.05,989.01,998.001]                   │
└─────────────────────────────────────────────────────────────────────┘

quantilesGK

quantilesGK 的工作方式类似于 quantileGK,但允许我们同时计算不同级别的分位数并返回一个数组。

语法

quantilesGK(accuracy, level1, level2, ...)(expr)

返回值

  • 指定级别的 Array 的分位数。

数组值的类型:

  • 对于数字数据类型输入,为 Float64
  • 如果输入值具有 Date 类型,则为 Date
  • 如果输入值具有 DateTime 类型,则为 DateTime

示例

查询:

SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1,1,1]                                          │
└──────────────────────────────────────────────────┘

SELECT quantilesGK(10, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(10, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [156,413,659]                                     │
└───────────────────────────────────────────────────┘
SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251,498,741]                                      │
└────────────────────────────────────────────────────┘

SELECT quantilesGK(1000, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(1000, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [249,499,749]                                       │
└─────────────────────────────────────────────────────┘