APPROXIMATE_QUANTILES

在用户指定的某些错误范围内,计算列的加权近似百分值数组。此算法类似于 APPROXIMATE_PERCENTILE [聚合](但其返回一个百分值)。

此函数的性能完全取决于指定的 epsilon 和所提供数组的大小。

此函数的 OVER 子句必须为空。

行为类型

不可变

语法

APPROXIMATE_QUANTILES ( column USING PARAMETERS [nquantiles=n], [epsilon=error] ) OVER() FROM table

参数

column
要计算百分值的 INTEGERFLOAT 列。忽略 NULL 值。
n
指定返回数组中所需分位数数量的整数。

默认值: 11

error
返回的任何百分值的允许误差。具体来说,对于大小为 N 的数组,φ-分位数的指定误差 ε (epsilon) 保证返回值的排名 r 相对于精确值的排名 ⌊φN⌋ 是这样的:

⌊(φ-ε)N⌋ ≤ r ≤ ⌊(φ+ε)N⌋

对于 n 分位数,如果指定误差 ε,使得 ε > 1/n,此函数将返回非确定性结果。

默认值: 0.001

table
包含的表。

示例

以下示例使用此表:

=> CREATE TABLE allsales(state VARCHAR(20), name VARCHAR(20), sales INT) ORDER BY state;
INSERT INTO allsales VALUES('MA', 'A', 60);
INSERT INTO allsales VALUES('NY', 'B', 20);
INSERT INTO allsales VALUES('NY', 'C', 15);
INSERT INTO allsales VALUES('MA', 'D', 20);
INSERT INTO allsales VALUES('MA', 'E', 50);
INSERT INTO allsales VALUES('NY', 'F', 40);
INSERT INTO allsales VALUES('MA', 'G', 10);
COMMIT;

=> SELECT * FROM allsales;
 state | name | sales
-------+------+-------
 MA    | A    |    60
 NY    | B    |    20
 NY    | C    |    15
 NY    | F    |    40
 MA    | D    |    20
 MA    | E    |    50
 MA    | G    |    10
(7 rows)

对 APPROXIMATE_QUANTILES 的调用返回一个由近似百分值组成的 6 元素数组,每个分位数一个。每个分位数与百分值的关系为 100 倍。例如,输出中的第二个条目指示 15 是输入列的 0.2 分位数,因此 15 是输入列的第 20 个百分值。

=> SELECT APPROXIMATE_QUANTILES(sales USING PARAMETERS nquantiles=6) OVER() FROM allsales;
 Quantile | Value
----------+-------
        0 |    10
      0.2 |    15
      0.4 |    20
      0.6 |    40
      0.8 |    50
        1 |    60
(6 rows)