본문 바로가기
> 개발/Database

[DB] SQL ROLLUP과 CUBE

by @일리 2023. 6. 28.

정보처리기사 실기를 공부하다가 데이터베이스에서 헷갈리는 개념이 있어서 간단하게 정리해보려고 블로그 글을 작성한다.

그룹함수

GROUP BY 절에 지정된 그룹별로 속성의 값을 집계할 때 사용하는 함수이다.

그룹함수는 집계 함수와 소계 함수로 또 구분할 수 있다.

집계 함수는 COUNT, SUM, AVG, MAX, MIN, STDDEV, VARIANCE 등이 있고,

소계 함수에는 오늘 알아볼 ROLLUP과 CUBE 가 있다.

ROLLUP

ROLLUP은 그룹별 소계를 구하는 함수이다. 인수로 주어진 속성의 순서에 따라 결과가 다르게 나올 수 있다.

하위 레벨에서 상위 레벨 순으로 데이터가 집계된다.

 

사용방법

ROLLUP(속성명1, 속성명2, ...)

 

인수에 따른 차이

ROLLUP(A) : A로 그룹핑, 총 합계

 

ROLLUP(A,B) : A,B로 그룹핑, A로 그룹핑, 총 합계

 

ROLLUP(A,B,C) : A,B,C로 그룹핑, A,B로 그룹핑, A로 그룹핑, 총 합계

 

CUBE

인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구한다.

상위 레벨에서 하위 레벨 순으로 데이터가 집계된다.

 

사용방법

CUBE(속성명1, 속성명2, ...)

 

인수에 따른 차이

CUBE(A) : A로 그룹핑, 총 합계

 

CUBE(A, B) : A,B로 그룹핑, A로 그룹핑, B로 그룹핑, 총 합계

 

CUBE(A, B, C) : A,B,C로 그룹핑, A,B로 그룹핑, A,C로 그룹핑, B,C로 그룹핑,

                           A로 그룹핑, B로 그룹핑, C로 그룹핑, 총 합계

 

ROLLUP 과 CUBE 결과 비교

1. ROLLUP

SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
FROM 상여금
GROUP BY ROLLUP(부서, 상여내역)

 

ROLLUP 예시
ROLLUP 예시

ROLLUP은 하위 레벨에서 상위 레벨 순으로 데이터가 집계된다. 헷갈리게도 3레벨이 하위 레벨이다. 

부서와 상여내역으로 그룹핑 -> 부서로 그룹핑 -> 총 합계 순으로 나타난다.

결과에서 기획 - 야간근무, 연장근무, 특별근무를 보고 부서와 상여내역으로 그룹핑된 것을 알 수 있고

부서만 있는 걸 보고 부서별로 그룹핑된 것을 알 수 있다.

2. CUBE

SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
FROM 상여금
GROUP BY CUBE(부서, 상여내역)

 

CUBE 예시
CUBE 예시

부서와 상여내역으로 그룹핑 -> 부서로 그룹핑 -> 상여내역으로 그룹핑 -> 총 합계가 역순으로 집계된다.

 

이렇게 정리해보니 결과물을 보고 ROLLUP과 CUBE를 구분하는 법을 알겠다!

댓글