GROUPING

GROUPING

GROUPING() 함수는 GROUP BY 쿼리로 생성된 행에서 표현식 목록 중 어떤 항목이 그룹화되어 있는지를 설명해요.

출처: Snowflake SQL Reference

본문

문법

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                      |
+-------+-------+------------+-----------------+-----------------+------------------------+

더 알아보기