DB/SQL

[SQL] GROUP BY 그룹별 집계 함수(ROLLUP, CUBE, GROUPING SETS의 차이점)

Huiyeon 2024. 11. 15. 15:04

 

 

SQLD를 공부하면서 헷갈리는 ROLLUP, CUBE, GROUPING SETS에 대한 차이점을 정리해봤습니다.

 

 

ROLLUP

- 지정된 열 데이터에 대해 집계함수를 포함하여 결과를 생성합니다.

SELECT 부서ID, 직급, SUM(연봉)
FROM 직원
GROUP BY ROLLUP (부서ID, 직급);

 

뤼튼을 사용해 예시 표를 가지고 왔습니다.

 

ROLLUP(부서ID, 직급)을 지정했으니

부서 ID가 같은 직급들의 총연봉을 계산한 부서ID 마지막열에 나타내주게 됩니다.

 

SELECT 부서ID, 직급, SUM(연봉) AS 총연봉
FROM 직원
GROUP BY ROLLUP ((부서ID), (직급));

 

만약 ROLLIP((부서ID), (직급)) 이렇게 독릭접으로 지정해주면

부서에 대한 집계와 직급에 대한 집계를 별도로 생성합니다.

 

 

CUBE

CUBE는  ROLLIP((부서ID), (직급))과 같은 결과를 보여주고 있습니다.

즉, 지정된 모든 열의 가능한 조합의 집계를 생성합니다.

 

SELECT 부서ID, 직급, SUM(연봉)
FROM 직원
GROUP BY CUBE (부서ID, 직급);

 

 

 

 

GROUPING SETS

GROUPING SETS는 사용자가 지정한 특정 집합에 대해 집계를 생성할 수 있습니다.

먼저 GROUPING SETS((부서ID, 직급))에 대한 쿼리문을 작성해보겠습니다.

SELECT 부서ID, 직급, SUM(연봉) AS 총연봉
FROM 직원
GROUP BY GROUPING SETS (
    (부서ID, 직급)
);

 

 

부서ID와 직급으로 집계를 생성했고 총 연봉만 표시됩니다.

 

 

 

GROUPING SET((부서ID),(직급))

SELECT 부서ID, 직급, SUM(연봉) AS 총연봉
FROM 직원
GROUP BY GROUPING SETS (
    (부서ID),
    (직급)
);

 

 

부서ID와 직급을 각각 독립적으로 집계해서 이런식으로 나오게 됩니다.

 

 

그럼 이 둘을 같이 작성하면 어떻게 될까요?

SELECT 부서ID, 직급, SUM(연봉)
FROM 직원
GROUP BY GROUPING SETS (
    (부서ID, 직급),
    (부서ID),
    (직급),
    ()
);

 

 

이런식으로 열의 조합을 직접 정의할 수 있어 맞춤형 분석이 가능하다고 합니다.

 

 

 

반응형