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
— 表达式,作用于列值,结果为数值 数据类型、Date 或 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
— 表达式,作用于列值,结果为数值 数据类型、Date 或 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
— 表达式,作用于列值,结果为数值 数据类型、Date 或 DateTime。
返回值
- 指定级别的分位数。
类型
示例
查询
SELECT quantileExactHigh(number) FROM numbers(10)
结果
┌─quantileExactHigh(number)─┐
│ 5 │
└───────────────────────────┘
quantileExactExclusive
精确计算数值数据序列的 分位数。
为了获得精确值,所有传递的值都组合成一个数组,然后对其进行部分排序。 因此,该函数消耗 O(n)
内存,其中 n
是传递的值的数量。 但是,对于少量值,该函数非常有效。
此函数等效于 PERCENTILE.EXC Excel 函数,(类型 R6)。
当在查询中使用具有不同级别的多个 quantileExactExclusive
函数时,内部状态不会组合(即,查询的工作效率低于可能的效率)。 在这种情况下,请使用 quantilesExactExclusive 函数。
语法
quantileExactExclusive(level)(expr)
参数
参数
返回值
- 指定级别的分位数。
类型
示例
查询
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)
参数
参数
返回值
- 指定级别的分位数。
类型
示例
查询
CREATE TABLE num AS numbers(1000);
SELECT quantileExactInclusive(0.6)(x) FROM (SELECT number AS x FROM num);
结果
┌─quantileExactInclusive(0.6)(x)─┐
│ 599.4 │
└────────────────────────────────┘
参见