跳至主要内容

quantileExact 函数

quantileExact

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

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

在查询中使用多个具有不同级别的 quantile* 函数时,内部状态不会合并(也就是说,查询的工作效率不如它可能达到的效率)。在这种情况下,请使用 quantiles 函数。

语法

quantileExact(level)(expr)

别名:medianExact

参数

  • level — 分位数级别。可选参数。从 0 到 1 的常数浮点数。我们建议使用 level 值在 [0.01, 0.99] 范围内。默认值:0.5。在 level=0.5 时,函数计算中位数
  • expr — 对列值执行的表达式,结果为数值数据类型DateDateTime

返回值

  • 指定级别的分位数。

类型

  • Float64,用于数值数据类型输入。
  • Date,如果输入值为 Date 类型。
  • DateTime,如果输入值为 DateTime 类型。

示例

查询

SELECT quantileExact(number) FROM numbers(10)

结果

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

quantileExactLow

quantileExact 相似,它计算数值数据序列的精确分位数

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

返回值取决于分位数级别和选择中元素的数量,即如果级别为 0.5,则函数将为偶数个元素返回较低的中位数,为奇数个元素返回中间的中位数。中位数的计算类似于median_low 实现,该实现用于 python 中。

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

SELECT quantileExactLow(0.1)(number) FROM numbers(10)

┌─quantileExactLow(0.1)(number)─┐
1
└───────────────────────────────┘

在查询中使用多个具有不同级别的 quantile* 函数时,内部状态不会合并(也就是说,查询的工作效率不如它可能达到的效率)。在这种情况下,请使用 quantiles 函数。

语法

quantileExactLow(level)(expr)

别名:medianExactLow

参数

  • level — 分位数级别。可选参数。从 0 到 1 的常数浮点数。我们建议使用 level 值在 [0.01, 0.99] 范围内。默认值:0.5。在 level=0.5 时,函数计算中位数
  • expr — 对列值执行的表达式,结果为数值数据类型DateDateTime

返回值

  • 指定级别的分位数。

类型

  • Float64,用于数值数据类型输入。
  • Date,如果输入值为 Date 类型。
  • DateTime,如果输入值为 DateTime 类型。

示例

查询

SELECT quantileExactLow(number) FROM numbers(10)

结果

┌─quantileExactLow(number)─┐
│ 4 │
└──────────────────────────┘

quantileExactHigh

quantileExact 相似,它计算数值数据序列的精确分位数

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

返回值取决于分位数级别和选择中元素的数量,即如果级别为 0.5,则函数将为偶数个元素返回较高の中位数,为奇数个元素返回中间的中位数。中位数的计算类似于median_high 实现,该实现用于 python 中。对于所有其他级别,将返回对应于 level * size_of_array 值的索引处的元素。

此实现与当前的 quantileExact 实现的行为完全相同。

在查询中使用多个具有不同级别的 quantile* 函数时,内部状态不会合并(也就是说,查询的工作效率不如它可能达到的效率)。在这种情况下,请使用 quantiles 函数。

语法

quantileExactHigh(level)(expr)

别名:medianExactHigh

参数

  • level — 分位数级别。可选参数。从 0 到 1 的常数浮点数。我们建议使用 level 值在 [0.01, 0.99] 范围内。默认值:0.5。在 level=0.5 时,函数计算中位数
  • expr — 对列值执行的表达式,结果为数值数据类型DateDateTime

返回值

  • 指定级别的分位数。

类型

  • Float64,用于数值数据类型输入。
  • Date,如果输入值为 Date 类型。
  • DateTime,如果输入值为 DateTime 类型。

示例

查询

SELECT quantileExactHigh(number) FROM numbers(10)

结果

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

quantileExactExclusive

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

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

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

在查询中使用多个 quantileExactExclusive 函数具有不同的级别时,内部状态不会合并(也就是说,查询的工作效率不如它可能达到的效率)。在这种情况下,请使用 quantilesExactExclusive 函数。

语法

quantileExactExclusive(level)(expr)

参数

参数

  • level — 分位数级别。可选。可能值: (0, 1) — 界限不包括在内。默认值:0.5。在 level=0.5 时,函数计算中位数Float.

返回值

  • 指定级别的分位数。

类型

  • Float64,用于数值数据类型输入。
  • Date,如果输入值为 Date 类型。
  • DateTime,如果输入值为 DateTime 类型。

示例

查询

CREATE TABLE num AS numbers(1000);

SELECT quantileExactExclusive(0.6)(x) FROM (SELECT number AS x FROM num);

结果

┌─quantileExactExclusive(0.6)(x)─┐
│ 599.6 │
└────────────────────────────────┘

quantileExactInclusive

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

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

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

在查询中使用多个 quantileExactInclusive 函数具有不同的级别时,内部状态不会合并(也就是说,查询的工作效率不如它可能达到的效率)。在这种情况下,请使用 quantilesExactInclusive 函数。

语法

quantileExactInclusive(level)(expr)

参数

参数

  • level — 分位数级别。可选。可能值[0, 1]— 界限包括在内。默认值:0.5。在 level=0.5 时,函数计算中位数Float.

返回值

  • 指定级别的分位数。

类型

  • Float64,用于数值数据类型输入。
  • Date,如果输入值为 Date 类型。
  • DateTime,如果输入值为 DateTime 类型。

示例

查询

CREATE TABLE num AS numbers(1000);

SELECT quantileExactInclusive(0.6)(x) FROM (SELECT number AS x FROM num);

结果

┌─quantileExactInclusive(0.6)(x)─┐
│ 599.4 │
└────────────────────────────────┘

另请参阅