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
    值不参与计算。

使用示例

  1. 计算单个百分位数(50th 百分位,即中位数):

SELECT percentile_approx(col, 0.5) FROM VALUES (0), (1), (2), (10) AS tab(col); +-----------------------------+ | percentile_approx(col, 0.5) | +-----------------------------+ | 1 | +-----------------------------+

  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] | +---------------+

  1. 按分组计算中位数:

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 | +---+-----------------------------+

  1. 计算 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] | +------------------------------------------+

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询