본문으로 건너뛰기
최종 수정: 에

GROUPING

설명​

GROUP BY 목록에서 지정한 컬럼 표현식이 집계되었는지 여부를 나타냅니다. GROUPING은 컬럼이 집계된 경우(즉, ROLLUP, CUBE 또는 GROUPING SETS가 생성한 요약 행에서 가져온 경우) 1을 반환하고, 집계되지 않은 경우 0을 반환합니다. 이 함수는 이러한 연산이 생성한 NULL 값과 데이터에 실제로 존재하는 NULL 값을 구분하는 데 유용합니다.

구문​

GROUPING( <column_expression> )

매개변수​

매개변수설명
<column_expression>GROUP BY 절에 나타나는 컬럼 또는 표현식입니다.

반환값​

BIGINT 값을 반환합니다. 지정한 컬럼 표현식이 집계된 경우 1을 반환하고, 집계되지 않은 경우 0을 반환합니다.

예제​

다음 예제는 camp 컬럼을 기준으로 그룹화하고 occupation의 개수를 집계합니다. GROUPING 함수를 camp 컬럼에 적용하여 ROLLUP 연산이 추가한 요약 행과 데이터에 실제로 존재하는 NULL 값을 구분합니다.

CREATE TABLE `roles` (
role_id INT,
occupation VARCHAR(32),
camp VARCHAR(32),
register_time DATE
)
UNIQUE KEY(role_id)
DISTRIBUTED BY HASH(role_id) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

INSERT INTO `roles` VALUES
(0, 'who am I', NULL, NULL),
(1, 'mage', 'alliance', '2018-12-03 16:11:28'),
(2, 'paladin', 'alliance', '2018-11-30 16:11:28'),
(3, 'rogue', 'horde', '2018-12-01 16:11:28'),
(4, 'priest', 'alliance', '2018-12-02 16:11:28'),
(5, 'shaman', 'horde', NULL),
(6, 'warrior', 'alliance', NULL),
(7, 'warlock', 'horde', '2018-12-04 16:11:28'),
(8, 'hunter', 'horde', NULL);

SELECT
camp,
COUNT(occupation) AS occ_cnt,
GROUPING(camp) AS grouping
FROM
`roles`
GROUP BY
ROLLUP(camp);

결과 집합의 camp 컬럼에는 NULL 값이 두 개 표시됩니다. grouping 값이 1인 첫 번째 NULL은 ROLLUP 연산이 추가한 요약 행으로, 모든 camp 그룹의 집계 결과를 나타냅니다. grouping 값이 0인 두 번째 NULL은 데이터에 실제로 존재하는 NULL 값을 나타냅니다.

+----------+---------+----------+
| camp | occ_cnt | grouping |
+----------+---------+----------+
| NULL | 9 | 1 |
| NULL | 1 | 0 |
| alliance | 4 | 0 |
| horde | 4 | 0 |
+----------+---------+----------+