类别:

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

APPROX_PERCENTILE_COMBINE

将多个百分位数输入状态组合(合并)为单个输出状态。

这允许 APPROX_PERCENTILE_ACCUMULATE 在同一表的水平分区上运行,从而为每个表分区生成算法状态。这些状态稍后可以使用 APPROX_PERCENTILE_COMBINE 进行组合,生成与整个表的 APPROX_PERCENTILE_ACCUMULATE 单次运行相同的输出状态。

另请参阅:

APPROX_PERCENTILE_ACCUMULATEAPPROX_PERCENTILE_ESTIMATE

语法

APPROX_PERCENTILE_COMBINE( <state> )
Copy

实参

state

一个表达式,其中包含通过调用 APPROX_PERCENTILE_ACCUMULATE 生成的状态信息。

示例

返回 testtable.c2 列中数字的中位数的近似值(0.5 表示第 50 个百分位数):

CREATE OR REPLACE TABLE mytesttable AS
  SELECT APPROX_PERCENTILE_COMBINE(td) s FROM
    (
      (SELECT APPROX_PERCENTILE_ACCUMULATE(c2) td FROM testtable WHERE c2 <= 0)
        UNION ALL
      (SELECT APPROX_PERCENTILE_ACCUMULATE(c2) td FROM testtable WHERE c2 > 0 AND c2 <= 0.5)
        UNION ALL
      (SELECT APPROX_PERCENTILE_ACCUMULATE(C2) td FROM testtable WHERE c2 > 0.5)
    );

SELECT APPROX_PERCENTILE_ESTIMATE(s , 0.5) FROM mytesttable;
Copy

返回 mytest.s1 union mytest2.s2 中数字的第 2 个百分位数的近似值。

CREATE OR REPLACE TABLE mytest AS (SELECT APPROX_PERCENTILE_ACCUMULATE(c2) s1 FROM testtable WHERE c2 < 0);

CREATE OR REPLACE TABLE mytest2 AS (SELECT APPROX_PERCENTILE_ACCUMULATE(c2) s1 FROM testtable WHERE c2 >= 0);

CREATE OR REPLACE TABLE combinedtable AS
  SELECT APPROX_PERCENTILE_COMBINE(s) combinedstate FROM
    (
      (SELECT s1 s FROM mytest)
        UNION ALL
      (SELECT s1 s FROM mytest2)
    );

SELECT APPROX_PERCENTILE_ESTIMATE(combinedstate , 0.02) FROM combinedtable;
Copy

有关更广泛的示例,请参阅 APPROX_PERCENTILE_ACCUMULATE 中的“示例”部分。

语言: 中文