全部產品
Search
文件中心

Hologres:有序聚集合函式

更新時間:Oct 31, 2024

互動式分析(Hologres)相容PostgreSQL,使用標準的PostgreSQL文法開發。

當前Hologres版本支援的函數是PostgreSQL的一個子集,Hologres已支援的有序聚集合函式列表如下。

函數

功能

MODE

計算一組資料中出現頻率最高的數值。

PERCENTILE_CONT

計算連續百分位元或多重連續百分位元。

PERCENTILE_DISC

計算離散百分位元或多重離散百分位元。

樣本資料

本文後續樣本均基於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}