PERCENTILE_APPROX
PERCENTILE_APPROX
PERCENTILE_APPROX
函数用于计算数值列的近似百分位数。与精确的
PERCENTILE
PERCENTILE
函数相比,
PERCENTILE_APPROX
PERCENTILE_APPROX
在处理大规模数据时性能更好,适合对精度要求不严格的场景。
语法
PERCENTILE_APPROX(value_expr, percentile)
参数说明
- value_expr:要计算百分位数的数值列或表达式,支持数值类型。
- percentile:所需的百分位数,取值范围为 0 到 1 之间的
DOUBLE
DOUBLE
常量,或由多个百分位数组成的数组(ARRAY<DOUBLE>
ARRAY<DOUBLE>
)。传入数组时,函数一次返回多个百分位数结果。
返回结果
- 传入单个百分位数时,返回
DOUBLE
DOUBLE
类型的近似值。
- 传入数组时,返回
ARRAY<DOUBLE>
ARRAY<DOUBLE>
类型,数组中每个元素对应输入数组中对应位置的百分位数结果。
NULL
NULL
值不参与计算。
使用示例
- 计算单个百分位数(50th 百分位,即中位数):
SELECT percentile_approx(col, 0.5) FROM VALUES (0), (1), (2), (10) AS tab(col);
+-----------------------------+
| percentile_approx(col, 0.5) |
+-----------------------------+
| 1 |
+-----------------------------+
- 一次计算多个百分位数:
SELECT percentile_approx(col, array(0.5, 0.4, 0.1)) AS res
FROM VALUES (0), (1), (2), (10) AS tab(col);
+---------------+
| res |
+---------------+
| [1,1.1,0] |
+---------------+
- 按分组计算中位数:
SELECT c, percentile_approx(col, 0.5)
FROM VALUES ('a', 1), ('a', 2), ('a', 3), ('b', 10), ('b', 20), ('b', 30) AS tab(c, col)
GROUP BY c;
+---+-----------------------------+
| c | percentile_approx(col, 0.5) |
+---+-----------------------------+
| a | 2 |
| b | 20 |
+---+-----------------------------+
- 计算 25th 和 75th 百分位数(四分位数):
SELECT percentile_approx(col, array(0.25, 0.75))
FROM VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10) AS tab(col);
+------------------------------------------+
| percentile_approx(col, array(0.25, 0.75)) |
+------------------------------------------+
| [3, 8] |
+------------------------------------------+