Programming/Database

(SQLD) GROUPING SETS, ROLLUP, CUBE 내용 및 예시 정리

Jan92 2024. 5. 26. 20:33

그룹화 확장 기능 GROUPING SETS, ROLLUP, CUBE 정리

GROUPING SETS, ROLLUP, CUBE 내용 정리

 

해당 포스팅에서는 'GROUP BY' 절을 확장하여 다양한 방식으로 데이터를 그룹화할 수 있도록 해주는 기능인 'GROUPING SETS', 'ROLLUP', 'CUBE'에 대해서 살펴보겠습니다.

 

실무에서는 사용해 본 적이 없으나 이번에 SQLD 자격증 공부 과정에서 이러한 기능이 있다는 것을 알게 되었으며, 각 기능에 대한 설명과 예시를 통해 이해하기 쉽도록 정리해 보았습니다.

 


GROUPING SETS 내용 및 예시

SELECT EMP_NO, null, SUM(SAL)  -- 사원번호(EMP_NO) 기준 그룹화된 급여 합계
FROM SALARIES
GROUP BY EMP_NO

UNION

SELECT null, PAYMENT_MONTH, SUM(SAL)  -- 지급 년월(PAYMENT_MONTH) 기준 그룹화된 급여 합계
FROM SALARIES
GROUP BY PAYMENT_MONTH;

 

예를 들어 '급여 지급 내역 테이블(SALARIES)'에서 사원 번호(EMP_NO)를 기준으로 그룹핑한 급여 합계 데이터와 지급년월(PAYMENT_MONTH)을 기준으로 그룹핑한 급여 합계 데이터를 한 번에 조회하고 싶을 경우, 사원번호와 지급년월을 기준으로 각각 'GROUP BY'를 사용한 데이터를 UNION을 통해 합쳐볼 수 있는데요.

 

이와 같은 경우 'GROUPING SETS' 기능을 사용하면 아래와 같이 하나의 쿼리로 동일한 결과를 조회할 수 있습니다.

 

 

-- GROUPING SETS 사용 예시
SELECT EMP_NO, PAYMENT_MONTH, SUM(SAL)
FROM SALARIES
GROUP BY GROUPING SETS(EMP_NO, PAYMENT_MONTH);

 

GROUPING SETS 사용 예시

이처럼 'GROUPING SETS'는 여러 GROUP BY 절을 하나의 쿼리로 작성할 수 있게 해 주며, 이 기능을 사용하면 서로 다른 그룹화 조합을 한 번에 조회할 수 있습니다.

 

추가로 'GROUPING SETS'의 경우 지정된 컬럼의 순서를 바꾸어도 결과에 영향을 받지 않는다는 특징이 있습니다.

 

 


ROLLUP 내용 및 예시

GROUP BY ROLLUP(A, B);
-- A, A+B, () 기준 그룹화된 집계 생성 / (): 전체를 의미

 

'ROLLUP'의 경우 그룹화된 데이터를 계층적으로 집계하는 기능입니다.

지정된 컬럼 목록의 순서에 따라 점진적으로 집계를 수행하며, 각 단계별 집계 및 총 집계 데이터를 생성합니다.

 

'ROLLUP(A, B)' 쿼리를 기준으로 설명하자면, 'A' 기준의 그룹화된 집계 + 'A, B' 기준의 그룹화된 집계 + 전체 기준의 그룹화된 집계를 생성하게 됩니다.

 

 

-- ROLLUP 사용 예시1
SELECT EMP_NO, PAYMENT_MONTH, SUM(SAL)
FROM SALARIES
GROUP BY ROLLUP(EMP_NO, PAYMENT_MONTH);

 

ROLLUP 사용 예시1

'급여 지급 내역 테이블(SALARIES)'에서 사원번호(EMP_NO)와 지급년월(PAYMENT_MONTH) 기준으로 ROLLUP 기능을 사용하였을 때, 아래 그룹화된 데이터를 출력하게 됩니다.

 

1. 사원번호를 기준으로 그룹화된 집계

2. 사원번호 + 지급년월을 기준으로 그룹화된 집계

3. 전체 집계

 

 

-- ROLLUP 사용 예시2
SELECT EMP_NO, PAYMENT_MONTH, SUM(SAL)
FROM SALARIES
GROUP BY ROLLUP((EMP_NO, PAYMENT_MONTH));

 

만약 '1. 사원번호를 기준으로 그룹화된 집계'를 제외하고 2번과 3번 집계 내역만 조회하고 싶을 경우 다음과 같이 (EMP_NO, PAYMENT_MONTH)를 괄호로 묶어 사용할 수도 있습니다.

 

ROLLUP 사용 예시2

 

추가로 'ROLLUP'의 경우 점진적 집계를 수행하기 때문에 지정된 컬럼의 순서를 바꾸게 되면 결과도 바뀌게 된다는 특징이 있습니다.

 

 


CUBE 내용 및 예시

GROUP BY CUBE(A, B);
-- A, B, A+B, () 기준 그룹화된 집계 생성 / (): 전체를 의미

 

'CUBE'의 경우 지정된 컬럼들의 모든 가능한 조합에 대한 집계 및 총 집계를 수행합니다.

때문에 특히 다차원 데이터 분석에서 유용하게 사용되는데요.

 

위의 'CUBE(A, B)' 쿼리를 기준으로 설명하자면, 'A' 기준의 그룹화된 집계 + 'B' 기준의 그룹화된 집계 + 'A, B' 기준의 그룹화된 집계 + 전체 기준의 그룹화된 집계 데이터를 생성하게 됩니다.

 

 

-- CUBE 사용 예시
SELECT EMP_NO, PAYMENT_MONTH, SUM(SAL)
FROM SALARIES
GROUP BY CUBE(EMP_NO, PAYMENT_MONTH);

 

CUBE 사용 예시

'급여 지급 내역 테이블(SALARIES)'에서 사원번호(EMP_NO)와 지급년월(PAYMENT_MONTH) 기준으로 CUBE 기능을 사용하였을 때, 아래 그룹화된 데이터를 출력하게 됩니다.

 

1. 전체 집계

2. 지급년월 기준으로 그룹화된 집계

3. 사원번호를 기준으로 그룹화된 집계

4. 사원번호 + 지급년월을 기준으로 그룹화된 집계

 

 

추가로 'CUBE'의 경우 지정된 컬럼들의 모든 가능한 조합에 대한 집계를 수행하기 때문에 지정된 컬럼의 순서를 바꾸어도 결과에 영향을 받지 않는다는 특징이 있습니다.