有序集合函数

Hologres兼容PostgreSQL,支持使用标准的PostgreSQL语法进行开发。

GROUPING

当前Hologres版本支持的函数是PostgreSQL的一个子集,函数的使用方法请参见有序集合函数

  • 语法

    GROUPING( <expr1> [ , <expr2> , ... ] );
  • 描述

    确定某个列是否被聚合。

  • 参数

    expr表示组的列。

    说明

    GROUPING是可以与聚合一起使用的实用程序函数,用于生成列的聚合级别:

    • GROUPING(expr) 若返回0,表示按照expr列进行了聚合,若返回1,表示未按照expr列进行聚合。

    • GROUPING(expr1,expr2,...exprN) 将会返回包含GROUPING(expr1),GROUPING(expr2),...,GROUPING(exprN)的位向量的整数表示。

  • 示例

    1. 创建表并插入数据

      CREATE TABLE t1 (
        col_x INT,
        col_y INT,
        col_z INT
      );
      
      INSERT INTO t1 VALUES(1, 2, 1), (1, 2, 3) ;
      INSERT INTO t1 VALUES(2, 1, 10), (2, 2, 11), (2, 2, 3) ;
      
      SELECT * FROM t1 ORDER BY col_x, col_y, col_z;

      返回结果如下。

       col_x | col_y | col_z 
      -------+-------+-------
           1 |     2 |     1
           1 |     2 |     3
           2 |     1 |    10
           2 |     2 |     3
           2 |     2 |    11
      (5 rows)
    2. 使用样例数据。

      SELECT  col_x, col_y, SUM(col_z), grouping(col_x), grouping(col_y), grouping(col_x, col_y)
      FROM    t1
      GROUP BY GROUPING sets ((col_x), (col_y), ())
      ORDER BY 1,2;

      返回结果如下。其中3表示二进制数11转换为的整数。

       col_x | col_y | sum | grouping | grouping | grouping 
      -------+-------+-----+----------+----------+----------
           1 |       |   4 |        0 |        1 |        1
           2 |       |  24 |        0 |        1 |        1
             |     1 |  10 |        1 |        0 |        2
             |     2 |  18 |        1 |        0 |        2
             |       |  28 |        1 |        1 |        3
      (5 rows)