分位数函数
quantiles
语法:quantiles(level1, level2, ...)(x)
所有分位数函数都有对应的分位数函数:quantiles
、quantilesDeterministic
、quantilesTiming
、quantilesTimingWeighted
、quantilesExact
、quantilesExactWeighted
、quantileInterpolatedWeighted
、quantilesTDigest
、quantilesBFloat16
、quantilesDD
。这些函数在一遍扫描中计算所有列出的级别的分位数,并返回一个包含结果值的数组。
quantilesExactExclusive
精确计算数值数据序列的分位数。
为了获得精确值,所有传入的值都会组合成一个数组,然后进行部分排序。因此,该函数消耗 O(n)
内存,其中 n
是传入的值的数量。但是,对于少量值,该函数非常有效。
此函数等效于 PERCENTILE.EXC Excel 函数,(类型 R6)。
与 quantileExactExclusive 相比,对一组级别工作效率更高。
语法
quantilesExactExclusive(level1, level2, ...)(expr)
参数
参数
level
— 分位数的级别。可能的值:(0, 1) — 不包括边界。 浮点数。
返回值
- 指定级别的分位数的数组。
数组值的类型
示例
查询
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
是传入的值的数量。但是,对于少量值,该函数非常有效。
此函数等效于 PERCENTILE.INC Excel 函数,(类型 R7)。
与 quantileExactInclusive 相比,对一组级别工作效率更高。
语法
quantilesExactInclusive(level1, level2, ...)(expr)
参数
参数
level
— 分位数的级别。可能的值[0, 1]— 包含边界。 浮点数。
返回值
- 指定级别的分位数的数组。
数组值的类型
示例
查询
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)
返回值
- 指定级别的分位数的数组。
数组值的类型
示例
查询
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] │
└─────────────────────────────────────────────────────┘