交互式分析(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}