#GROUPING_ID

grouping_id
GROUPING_ID ( expr , )

在GROUP BY分组排序计算时,如果需要进一步通过ROLLUP或GROUPING SETS来拓展聚合计算,可以通过GROUPING函数确定查询结果中的NULL是列值还是ROLLUP聚合标记,结果为1时表示为聚合结果,为0时表示正常列值。

本函数的返回值类型为NUMBER,当GROUPING_ID的参数expr只有1个时,结果同GROUPING。

本函数支持1 - 126个参数,参数数量不在此范围则报错。

本函数必须与GROUP BYGROUP BY ROLLUPGROUP BY CUBEGROUP BY GROUPING SETS语句结合使用,函数内部不能使用DISTINCT。

expr可以为除UDT以外的任意数据类型,不能为NULL且不能为聚集函数。

示例

以下示例中,GROUPING返回值1表示对name列的聚合计算,返回值3表示对dept和name的聚合计算。

CREATE TABLE dept
(ID INTEGER  NOT NULL PRIMARY KEY,
 dept VARCHAR(10),
 name VARCHAR(10) NOT NULL,
 salary INTEGER NOT NULL);
INSERT INTO dept VALUES (1,'A','LI',8000);
INSERT INTO dept VALUES (2,'A','chang',10000);
INSERT INTO dept VALUES (3,'A','tina',6000);
INSERT INTO dept VALUES (4,'A','kate',4000);
INSERT INTO dept VALUES (5,'A','nora',4500);
INSERT INTO dept VALUES (6,'B','tom',7800);
INSERT INTO dept VALUES (7,'B','jerry',6600);
INSERT INTO dept VALUES (8,'C','lisa',4500);
INSERT INTO dept VALUES (9,'C','mona',3200);

SELECT dept, name, SUM(salary) total, GROUPING_ID(dept, name) 
FROM DEPT GROUP BY ROLLUP(dept, name);

DEPT       NAME             TOTAL GROUPING_ID(DEPT,NAME) 
---------- ---------- ----------- ----------- 
A          LI                8000           0 
A                           32500           1 
                            54600           3 
A          chang            10000           0 
A          tina              6000           0 
A          kate              4000           0 
A          nora              4500           0 
B          tom               7800           0 
B                           14400           1 
B          jerry             6600           0 
C          lisa              4500           0 
C                            7700           1 
C          mona              3200           0 

SELECT dept, name, SUM(salary) total, GROUPING_ID(dept, name)
FROM DEPT GROUP BY CUBE(dept, name);

DEPT       NAME             TOTAL GROUPING_ID(DEPT,NAME) 
---------- ---------- ----------- ----------- 
A          LI                8000           0 
A                           32500           1 
           LI                8000           2 
                            54600           3 
A          chang            10000           0 
           chang            10000           2 
A          tina              6000           0 
           tina              6000           2 
A          kate              4000           0 
           kate              4000           2 
A          nora              4500           0 
           nora              4500           2 
B          tom               7800           0 
B                           14400           1 
           tom               7800           2 
B          jerry             6600           0 
           jerry             6600           2 
C          lisa              4500           0 
C                            7700           1 
           lisa              4500           2 
C          mona              3200           0 
           mona              3200           2 

SELECT dept, name, SUM(salary) total, GROUPING_ID(dept, name) 
FROM DEPT GROUP BY dept,name;

DEPT       NAME             TOTAL GROUPING_ID(DEPT,NAME) 
---------- ---------- ----------- ----------- 
A          LI                8000           0 
A          chang            10000           0 
A          tina              6000           0 
A          kate              4000           0 
A          nora              4500           0 
B          tom               7800           0 
B          jerry             6600           0 
C          lisa              4500           0 
C          mona              3200           0 

SELECT dept, name, SUM(salary) total, GROUPING_ID(dept, name)
FROM DEPT GROUP BY GROUPING SETS(dept, name);

DEPT       NAME             TOTAL GROUPING_ID(DEPT,NAME) 
---------- ---------- ----------- ----------- 
           LI                8000           2 
A                           32500           1 
           chang            10000           2 
           tina              6000           2 
           kate              4000           2 
           nora              4500           2 
           tom               7800           2 
B                           14400           1 
           jerry             6600           2 
           lisa              4500           2 
C                            7700           1 
           mona              3200           2 

pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流