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

quantiles 函数

分位数

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

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

quantilesExactExclusive

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

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

此函数等效于 Excel 的 PERCENTILE.EXC 函数,(类型 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 是传递的值的数量。 但是,对于少量值,该函数非常有效。

此函数等效于 Excel 的 PERCENTILE.INC 函数,(类型 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]
└─────────────────────────────────────────────────────┘