GROUPING
GROUPING
GROUPING() 함수는 GROUP BY 쿼리로 생성된 행에서 표현식 목록 중 어떤 항목이 그룹화되어 있는지를 설명해요.
본문
문법
GROUPING( <expr1> [ , <expr2> , ... ] )
사용 메모
GROUPING은 집계 함수가 아니라, 집계와 함께 사용해 행이 생성된 집계 수준을 결정하는 유틸리티 함수예요.
expr에 대해 그룹화된 행이면 GROUPING(expr)은 0을 반환하고,expr에 대해 그룹화되지 않은 행이면 1을 반환해요.- GROUPING(
expr1,expr2, … ,exprN)은 GROUPING(expr1), GROUPING(expr2), … , GROUPING(exprN)을 담은 비트 벡터의 정수 표현을 반환해요.
예제
세트별로 그룹화해요.
값으로 테이블을 만들고 채워요.
CREATE OR REPLACE TABLE aggr2(col_x int, col_y int, col_z int);
INSERT INTO aggr2 VALUES(1, 2, 1), (1, 2, 3);
INSERT INTO aggr2 VALUES(2, 1, 10), (2, 2, 11), (2, 2, 3);
테이블의 값을 표시해요.
SELECT * FROM aggr2 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 |
+-------+-------+-------+
출력해요.
SELECT col_x, col_y, sum(col_z), grouping(col_x), grouping(col_y), grouping(col_x, col_y) FROM aggr2 GROUP BY GROUPING SETS ((col_x), (col_y), ()) ORDER BY 1, 2;
+-------+-------+------------+-----------------+-----------------+------------------------+
| COL_X | COL_Y | SUM(COL_Z) | GROUPING(COL_X) | GROUPING(COL_Y) | GROUPING(COL_X, COL_Y) |
|-------+-------+------------+-----------------+-----------------+------------------------|
| 1 | NULL | 4 | 0 | 1 | 1 |
| 2 | NULL | 24 | 0 | 1 | 1 |
| NULL | 1 | 10 | 1 | 0 | 2 |
| NULL | 2 | 18 | 1 | 0 | 2 |
| NULL | NULL | 28 | 1 | 1 | 3 |
+-------+-------+------------+-----------------+-----------------+------------------------+