跳至主要内容

分位数函数

quantiles

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

所有分位数函数都有对应的分位数函数:quantilesquantilesDeterministicquantilesTimingquantilesTimingWeightedquantilesExactquantilesExactWeightedquantileInterpolatedWeightedquantilesTDigestquantilesBFloat16quantilesDD。这些函数在一遍扫描中计算所有列出的级别的分位数,并返回一个包含结果值的数组。

quantilesExactExclusive

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

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

此函数等效于 PERCENTILE.EXC Excel 函数,(类型 R6)。

quantileExactExclusive 相比,对一组级别工作效率更高。

语法

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

参数

参数

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

返回值

  • 指定级别的分位数的数组

数组值的类型

  • 如果数值数据类型输入,则为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 是传入的值的数量。但是,对于少量值,该函数非常有效。

此函数等效于 PERCENTILE.INC Excel 函数,(类型 R7)。

quantileExactInclusive 相比,对一组级别工作效率更高。

语法

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

参数

参数

  • level — 分位数的级别。可能的值[0, 1]— 包含边界。 浮点数

返回值

  • 指定级别的分位数的数组

数组值的类型

  • 如果数值数据类型输入,则为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)

返回值

  • 指定级别的分位数的数组

数组值的类型

  • 如果数值数据类型输入,则为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]
└─────────────────────────────────────────────────────┘