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
— 对列值执行的表达式,结果为数值数据类型,Date 或 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
— 对列值执行的表达式,结果为数值数据类型,Date 或 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
— 对列值执行的表达式,结果为数值数据类型,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 │
└────────────────────────────────┘
另请参阅