APPROX_PERCENTILE¶
返回所需百分位数的近似值,即,如果列 c
中有 n
个数字,则 APPROX_PERCENTILE(c, p) 将返回一个数字,使 c
中大约有 n * p
个数字小于返回的数字。
此函数使用 t-Digest 算法的改进版本。有关更多信息,请参阅 估算百分位值。
语法¶
聚合函数
APPROX_PERCENTILE( <expr> , <percentile> )
窗口函数
APPROX_PERCENTILE( <expr> , <percentile> ) OVER ( [ PARTITION BY <expr3> ] )
实参¶
expr
计算结果为数值的有效表达式,例如列名。
percentile
大于或等于
0.0
且小于1.0
的常量实值。此表达式表示百分位数(从 0 到 99.999...)。例如,值 0.65 表示第 65 个百分位数。expr3
这是可选表达式,用于将行分组到分区。
返回¶
输出以 DOUBLE 值返回。
使用说明¶
百分位数仅适用于数值,因此
expr
应生成属于数字或可转换为数字的值。返回的值不一定在数据集中。
返回的值是近似值。数据集的大小和数据集中的偏差会影响近似值的准确性。
用作窗口函数时:
此函数不支持:
OVER() 子句中的 ORDER BY 分子句。
窗口框架。
示例¶
演示 APPROX_PERCENTILE
函数:
创建并使用以下值填充表:
CREATE TABLE testtable (c1 INTEGER); INSERT INTO testtable (c1) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);运行查询并显示输出:
SELECT APPROX_PERCENTILE(c1, 0.1) FROM testtable; +----------------------------+ | APPROX_PERCENTILE(C1, 0.1) | |----------------------------| | 1.5 | +----------------------------+SELECT APPROX_PERCENTILE(c1, 0.5) FROM testtable; +----------------------------+ | APPROX_PERCENTILE(C1, 0.5) | |----------------------------| | 5.5 | +----------------------------+请注意,此案例中返回的值高于数据集中的任何实际值:
SELECT APPROX_PERCENTILE(c1, 0.999) FROM testtable; +------------------------------+ | APPROX_PERCENTILE(C1, 0.999) | |------------------------------| | 10.5 | +------------------------------+