交互式分析(Hologres)兼容PostgreSQL,使用标准的PostgreSQL语法开发。
当前Hologres版本支持的函数是PostgreSQL的一个子集,Hologres已支持的有序聚集函数列表如下。
函数 | 功能 |
计算一组数据中出现频率最高的数值。 | |
计算连续百分位数或多重连续百分位数。 | |
计算离散百分位数或多重离散百分位数。 | |
示例数据
本文后续示例均基于stu
表的数据进行验证。
CREATE TABLE stu(id bigint, score bigint);
INSERT INTO stu VALUES (1, 50);
INSERT INTO stu VALUES (2, 60);
INSERT INTO stu VALUES (3, 70);
INSERT INTO stu VALUES (4, 80);
INSERT INTO stu VALUES (5, 90);
INSERT INTO stu VALUES (6, 40);
INSERT INTO stu VALUES (7, 30);
INSERT INTO stu VALUES (8, 30);
MODE
描述:计算一组数据中出现频率最高的数值。
MODE() WITHIN GROUP (ORDER BY <sort_expression>);
参数说明
sort_expression:必填,列名或基于列名表达式,可以是任何可排序类型。
返回值说明
返回出现频率最高的输入值。
如果有多个频率相同的值,则返回第一个。
示例
SELECT MODE() WITHIN GROUP (ORDER BY score ASC) FROM stu;
返回结果如下。
mode ------ 30
PERCENTILE_CONT
描述:
计算连续百分位数。
PERCENTILE_CONT(<fraction>) WITHIN GROUP (ORDER BY <sort_expression>)
计算多重连续百分位数。
PERCENTILE_CONT(<fractions>) WITHIN GROUP (ORDER BY <sort_expression>)
参数说明
fraction:必填,介于0到1之间的小数,类型为
DOUBLE PRECISION
。fractions:必填,介于0到1之间的多组小数,类型为
DOUBLE PRECISION[]
。sort_expression:必填,列名或基于列名表达式,类型为可排序类型。支持数据类型有INTEGER、BIGINT、DOUBLE PRECISION、REAL、FLOAT4、FLOAT8、SMALLINT、NUMERIC和DECIMAL。
返回值说明
PERCENTILE_CONT(<fraction>)
返回一个对应于排序中指定分数的值,如有必要就在相邻的输入项之间插值。类型为
DOUBLE PRECISION
或者INTERVAL
。PERCENTILE_CONT(<fractions>)
返回一个匹配fractions参数数量的结果数组, 其中每一个非空元素都用对应于那个百分率的值替换。类型为
DOUBLE PRECISION
或者INTERVAL
的数组。
示例
示例1:计算
score
列第50的百分位数。SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY score ASC) FROM stu;
返回结果如下。
percentile_cont ----------------- 55
示例2:计算
score
列第25、50和75的百分位数。SELECT PERCENTILE_CONT(ARRAY[0.25, 0.5, 0.75]) WITHIN GROUP (ORDER BY score ASC) FROM stu;
返回结果如下。
percentile_cont ----------------- {37.5,55.0,72.5}
PERCENTILE_DISC
描述:
计算离散百分位数。
PERCENTILE_DISC(<fraction>) WITHIN GROUP (ORDER BY <sort_expression>)
计算多重离散百分位数。
PERCENTILE_DISC(<fractions>) WITHIN GROUP (ORDER BY <sort_expression>)
参数说明
fraction:必填,介于0到1之间的小数,类型为
DOUBLE PRECISION
。fractions:必填,介于0到1之间的多组小数,类型为
DOUBLE PRECISION[]
。sort_expression:必填,列名或基于列名表达式,类型为可排序类型。
重要支持数据类型有DOUBLE PRECISION和FLOAT8。
该参数不支持类型SMALLINT、INTEGER、BIGINT、REAL、FLOAT4、NUMERIC和DECIMAL类型,若您需要使用此函数来对这些类型进行计算,需将其转换为FLOAT8类型,例如:
WITHIN GROUP (ORDER BY <sort_expression>::float8)
。
返回值说明
返回第一个在排序中位置等于或者超过指定分数的输入值。
返回一个匹配fractions参数数量的结果数组, 其中每一个非空元素都用对应于那个百分率的输入值替换。
示例
示例1:计算
score
列第40的百分位数。SELECT PERCENTILE_DISC(0.4) WITHIN GROUP (ORDER BY score::float8 ASC) FROM stu;
返回结果如下。
percentile_disc ----------------- 50
示例2:计算
score
列第25、50和75的百分位数。SELECT PERCENTILE_DISC(ARRAY[0.25, 0.5, 0.75]) WITHIN GROUP (ORDER BY score::float8 ASC) FROM stu;
返回结果如下。
percentile_disc ----------------- {30.0,50.0,70.0}