APPROX_PERCENTILE()¶
APPROX_PERCENTILE(expr, percentile)在不对全部输入排序的情况下估算数值表达式的分位数。
描述¶
APPROX_PERCENTILE 是一个聚合函数。它会忽略 expr 中的 NULL 值,并为每个分组返回请求分位数的近似值。
第一个参数支持 BIT、有符号和无符号整数、FLOAT32、FLOAT64、DECIMAL64 以及 DECIMAL128 输入。返回类型由输入类型决定:
输入类型 |
返回类型 |
|---|---|
|
|
|
|
输入精度已经是 38 的 DECIMAL 会保留输入 scale。DECIMAL 插值结果会按声明的结果 scale 舍入。
语法¶
APPROX_PERCENTILE(expr, percentile)
参数¶
参数 |
说明 |
|---|---|
|
受支持的数值表达式;其中的 |
|
|
不支持 DISTINCT 修饰符。输入为空或全部为 NULL 时返回 NULL。
示例¶
DROP DATABASE IF EXISTS approx_percentile_demo;
CREATE DATABASE approx_percentile_demo;
USE approx_percentile_demo;
CREATE TABLE t1 (a INT, b INT, d DECIMAL(10, 2));
INSERT INTO t1 VALUES (1, 1, 1.10), (2, 3, 3.30), (3, 5, 5.50), (4, 7, 7.70), (5, 9, 9.90);
SELECT APPROX_PERCENTILE(b, 0.5) AS p50 FROM t1;
SELECT APPROX_PERCENTILE(b, 0.95) AS p95 FROM t1;
SELECT APPROX_PERCENTILE(d, 0.5) AS decimal_p50 FROM t1;
SELECT a, APPROX_PERCENTILE(b, 0.5) AS p50 FROM t1 GROUP BY a ORDER BY a;
SELECT APPROX_PERCENTILE(CAST(NULL AS INT), 0.5) AS all_null_result;
DROP DATABASE approx_percentile_demo;
以下形式会被拒绝:
-- Expected-Success: false
SELECT APPROX_PERCENTILE(b, NULL) FROM t1;
-- Expected-Success: false
SELECT APPROX_PERCENTILE(b, 1.1) FROM t1;