GROUPING_ID
GROUPING_ID
GROUP BY 쿼리로 생성된 행에서, 표현식 목록 중 어느 것이 그룹화되었는지 설명해요.
GROUPING의 별칭이에요.
본문
구문
GROUPING_ID( <expr1> [ , <expr2> , ... ] )
사용 시 참고 사항
GROUPING_ID는 집계 함수가 아니라, 집계와 함께 사용해 행이 생성된 집계 수준을 결정하는 유틸리티 함수예요.
- GROUPING_ID(expr)은 expr로 그룹화된 행에 대해서는 0을, expr로 그룹화되지 않은 행에 대해서는 1을 반환해요.
- GROUPING_ID(expr1, expr2, …, exprN)은 GROUPING_ID(expr1), GROUPING_ID(expr2), …, GROUPING_ID(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);
이 예시는 col_x로 그룹화해요. GROUPING_ID(col_x)를 호출하면 0이 반환되어 col_x가 실제로 그룹화 열 중 하나임을 나타내요.
SELECT col_x, sum(col_z), GROUPING_ID(col_x)
FROM aggr2
GROUP BY col_x
ORDER BY col_x;
+-------+------------+--------------------+
| COL_X | SUM(COL_Z) | GROUPING_ID(COL_X) |
|-------+------------+--------------------|
| 1 | 4 | 0 |
| 2 | 24 | 0 |
+-------+------------+--------------------+
이 쿼리는 집합으로 그룹화해요.
SELECT col_x, col_y, sum(col_z),
GROUPING_ID(col_x),
GROUPING_ID(col_y),
GROUPING_ID(col_x, col_y)
FROM aggr2
GROUP BY GROUPING SETS ((col_x), (col_y), ())
ORDER BY col_x ASC, col_y DESC;
+-------+-------+------------+--------------------+--------------------+---------------------------+
| COL_X | COL_Y | SUM(COL_Z) | GROUPING_ID(COL_X) | GROUPING_ID(COL_Y) | GROUPING_ID(COL_X, COL_Y) |
|-------+-------+------------+--------------------+--------------------+---------------------------|
| 1 | NULL | 4 | 0 | 1 | 1 |
| 2 | NULL | 24 | 0 | 1 | 1 |
| NULL | NULL | 28 | 1 | 1 | 3 |
| NULL | 2 | 18 | 1 | 0 | 2 |
| NULL | 1 | 10 | 1 | 0 | 2 |
+-------+-------+------------+--------------------+--------------------+---------------------------+
더 알아보기
- Aggregate functions — 집계 함수 모음
- GROUP BY — GROUP BY 절
- GROUPING — 그룹화 여부 판별