APPROXIMATE_QUANTILES
在用户指定的某些错误范围内,计算列的加权近似百分值数组。此算法类似于 APPROXIMATE_PERCENTILE [聚合](但其返回一个百分值)。
此函数的性能完全取决于指定的 epsilon 和所提供数组的大小。
此函数的 OVER 子句必须为空。
行为类型
不可变语法
APPROXIMATE_QUANTILES ( column USING PARAMETERS [nquantiles=n], [epsilon=error] ) OVER() FROM table
参数
- column
- 要计算百分值的
INTEGER
或FLOAT
列。忽略 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)