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

quantileExact 函数

quantileExact

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

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

当在查询中使用具有不同级别的多个 quantile* 函数时,内部状态不会组合(即,查询的工作效率低于可能的效率)。 在这种情况下,请使用 quantiles 函数。

语法

quantileExact(level)(expr)

别名:medianExact

参数

  • level — 分位数级别。 可选参数。 从 0 到 1 的常数浮点数。 我们建议使用 [0.01, 0.99] 范围内的 level 值。 默认值: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,则对于偶数个元素,该函数返回较低的中位数,对于奇数个元素,则返回中间中位数。 中位数的计算方式与 Python 中使用的 median_low 实现类似。

对于所有其他级别,将返回索引对应于 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 的常数浮点数。 我们建议使用 [0.01, 0.99] 范围内的 level 值。 默认值: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,则对于偶数个元素,该函数返回较高的中位数,对于奇数个元素,则返回中间中位数。 中位数的计算方式与 Python 中使用的 median_high 实现类似。 对于所有其他级别,将返回索引对应于 level * size_of_array 值的元素。

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

当在查询中使用具有不同级别的多个 quantile* 函数时,内部状态不会组合(即,查询的工作效率低于可能的效率)。 在这种情况下,请使用 quantiles 函数。

语法

quantileExactHigh(level)(expr)

别名:medianExactHigh

参数

  • level — 分位数级别。 可选参数。 从 0 到 1 的常数浮点数。 我们建议使用 [0.01, 0.99] 范围内的 level 值。 默认值: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 时,该函数计算 中位数浮点数

返回值

  • 指定级别的分位数。

类型

  • 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 时,该函数计算 中位数浮点数

返回值

  • 指定级别的分位数。

类型

  • 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 │
└────────────────────────────────┘

参见