공부/sql

ROLLUP

hansuya 2025. 5. 28. 10:09

rollup은 group by 와 함께 사용되는 확장기능으로, 다차원 집계를 자동으로 생성할 수 있다. 즉, group by 의 결과에 추가적으로 총합(소계 및 전체 합계)을 계산하는 역할을 한다

기본문법
select col1, col2, 집계함수(col3)
from table_name
group by rollup(col1, col2)
;
>>> rollup(col1, col2)는 계층적으로 집계 데이터를 생성
>>> col2에 대한 그룹화 -> col1에 대한 그룹화 -> 전체 데이터에 대한 합계를 반환한다

예제
기본 group by 사용
select department, job_title, sum(salary) as total_salary
from employees
group by department, job_title
;

rollup 을 사용한 다차원 집계
select department, job_title, sum(salary) as total_salary
from employees
group by rollup(department, job_title)
;
>>> 차이점
job_title이 null 인 행 : 해당 department 내의 급여 합계(부서별 총합)
department와 job_title이 둘 다 null 인 행 : 전체 데이터의 총합

rollup의 특징
계층적 집계를 자동으로 수행하여 부서별 합계, 전체 합계 등을 구할 때 유용하다
group by 보다 더 상세한 소계(subtotal)와 전체 합계(total) 를 제공할 수 있다
null 값이 있는 행은 상위 계층(소계 및 총합)을 의미한다

having과 함께 사용
만일 전체 합계(null 이 포함된 행)을 제외하고 싶다면 having 절을 활용할 수 있다

select department, job_title, sum(salary) as total_salary
from employees
group by rollup(department, job_title)
having department is not null;
>>> 이렇게 하면 전체 총합(null, null) 행이 제거된다

'공부 > sql' 카테고리의 다른 글

오라클 Explain plan for  (0) 2025.05.28
계층적 쿼리 SYS_CONNECT_BY_PATH  (0) 2025.05.28
ROW_NUMBER() OVER(PARTITION BY - ORDER BY)  (0) 2025.05.28
CONNECT BY LEVEL  (0) 2025.05.28
GRANT에 사용된 RESOURCE 키워드  (0) 2025.05.28