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 |