类别:

聚合函数 (百分位估计)、 窗口函数

APPROX_PERCENTILE

返回所需百分位数的近似值,即,如果列 c 中有 n 个数字,则 APPROX_PERCENTILE(c, p) 将返回一个数字,使 c 中大约有 n * p 个数字小于返回的数字。

此函数使用 t-Digest 算法的改进版本。有关更多信息,请参阅 估算百分位值

另请参阅:

APPROX_PERCENTILE_ACCUMULATEAPPROX_PERCENTILE_COMBINEAPPROX_PERCENTILE_ESTIMATE

语法

聚合函数

APPROX_PERCENTILE( <expr> , <percentile> )
Copy

窗口函数

APPROX_PERCENTILE( <expr> , <percentile> ) OVER ( [ PARTITION BY <expr3> ] )
Copy

实参

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);
Copy

运行查询并显示输出:

SELECT APPROX_PERCENTILE(c1, 0.1) FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.1) |
|----------------------------|
|                        1.5 |
+----------------------------+
Copy
SELECT APPROX_PERCENTILE(c1, 0.5) FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.5) |
|----------------------------|
|                        5.5 |
+----------------------------+
Copy

请注意,此案例中返回的值高于数据集中的任何实际值:

SELECT APPROX_PERCENTILE(c1, 0.999) FROM testtable;
+------------------------------+
| APPROX_PERCENTILE(C1, 0.999) |
|------------------------------|
|                         10.5 |
+------------------------------+
Copy
语言: 中文