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

命令语法

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

Hologres已支持的有序集合函数表达式如下。
GROUPING( <expr1> [ , <expr2> , ... ] )

参数说明

GROUPING不是聚合函数,而是可以与聚合一起使用的实用程序函数,用于确定针对如下行生成行的聚合级别:
  • GROUPING(expr) 若返回0,表示按照expr行进行了聚合,若返回1,表示未按照expr行进行聚合。
  • GROUPING(expr1,expr2,...exprN) 将会返回包含GROUPING(expr1),GROUPING(),...,GROUPING(exprN)的位向量的整数表示。

使用示例

  • 创建表并插入数据
    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)
  • 使用样例
    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)