APPROXIMATE_PERCENTILE [聚合]
计算一组行中表达式的近似百分值。此函数返回一个 FLOAT 值。
注意
注意: 当许多行聚合成组时使用此函数。如果聚合行数较少,请使用分析函数 PERCENTILE_CONT。行为类型
不可变语法
APPROXIMATE_PERCENTILE ( column-expression USING PARAMETERS percentiles='percentile-values' )
参数
- column-expression
- 将计算其百分值的 FLOAT 或 INTEGER 数据类型的列。忽略 NULL 值。
参数
percentiles
- 一个或多个(最多 1000 个)逗号分隔的
FLOAT
常量,范围从 0 到 1(包含),指定要计算的百分值。
注意
注意: 已弃用的参数percentile
,只接受一个浮点数,继续支持向后兼容性。
示例
提示
为了在查询中使用GROUP BY
时获得最佳性能,请验证您的表是否按 GROUP BY
列排序。
以下示例使用此表:
=> 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)
计算每个州的销售的近似百分值:
=> SELECT state, APPROXIMATE_PERCENTILE(sales USING PARAMETERS percentiles='0.5') AS median
FROM allsales GROUP BY state;
state | median
-------+--------
MA | 35
NY | 20
(2 rows)
计算每个州的销售的多个近似百分值:
=> SELECT state, APPROXIMATE_PERCENTILE(sales USING PARAMETERS percentiles='0.5,1.0')
FROM allsales GROUP BY state;
state | APPROXIMATE_PERCENTILE
-------+--------
MA | [35.0,60.0]
NY | [20.0,40.0]
(2 rows)
计算每个州的销售的多个近似百分值,并在单独的列中显示每个百分值的结果:
=> SELECT ps[0] as q0, ps[1] as q1, ps[2] as q2, ps[3] as q3, ps[4] as q4
FROM (SELECT APPROXIMATE_PERCENTILE(sales USING PARAMETERS percentiles='0, 0.25, 0.5, 0.75, 1')
AS ps FROM allsales GROUP BY state) as s1;
q0 | q1 | q2 | q3 | q4
------+------+------+------+------
10.0 | 17.5 | 35.0 | 52.5 | 60.0
15.0 | 17.5 | 20.0 | 30.0 | 40.0
(2 rows)