`ROLLUP` 함수는 SQL에서 계층적인 집계를 생성하는 데 사용됩니다. 괄호를 사용하여 여러 열을 그룹화할 때, 괄호의 위치에 따라 계층적으로 집계가 다르게 수행됩니다.
### `ROLLUP` 사용법
- **괄호 없는 경우**: 열들이 순차적으로 계층화되어 집계됩니다.
- **괄호 있는 경우**: 괄호 안의 열들은 그룹화된 집계로 처리되며, 그 결과에 대한 상위 집계를 생성합니다.
### 예시 설명
`ROLLUP((job), (deptno))`의 경우, 다음과 같이 작동합니다:
- 첫 번째 괄호 `(job)`는 `job` 열에 대한 집계를 수행합니다.
- 두 번째 괄호 `(deptno)`는 `deptno` 열에 대한 집계를 수행하며, `job`을 포함한 모든 상위 집계를 수행합니다.
즉, `ROLLUP((job), (deptno))`는 두 가지 차원에서 집계하며, 각 열에 대해 상위 집계를 포함하는 결과를 생성합니다.
#### 예시 테이블
아래와 같은 `employee` 테이블이 있다고 가정합니다:
| job | deptno | salary |
|----------|--------|--------|
| Manager | 10 | 3000 |
| Clerk | 10 | 2000 |
| Analyst | 20 | 2500 |
| Clerk | 20 | 1500 |
#### 쿼리
```sql
SELECT job, deptno, SUM(salary) AS total_salary
FROM employee
GROUP BY ROLLUP(job, deptno);
```
### 결과
이 쿼리는 다음과 같은 결과를 생성합니다:
| job | deptno | total_salary |
|----------|--------|--------------|
| Manager | 10 | 3000 | -- 10번 부서의 Manager의 총 급여
| Clerk | 10 | 2000 | -- 10번 부서의 Clerk의 총 급여
| NULL | 10 | 5000 | -- 10번 부서의 총 급여
| Analyst | 20 | 2500 | -- 20번 부서의 Analyst의 총 급여
| Clerk | 20 | 1500 | -- 20번 부서의 Clerk의 총 급여
| NULL | 20 | 4000 | -- 20번 부서의 총 급여
| NULL | NULL | 9000 | -- 전체 총 급여
### 해석
- **`job, deptno`**: 각 `job`과 `deptno` 조합에 대한 집계.
- **`job, NULL`**: 각 `job`에 대한 전체 집계 (부서별 총 급여 포함).
- **`NULL, deptno`**: 각 `deptno`에 대한 전체 집계 (직무별 총 급여 포함).
- **`NULL, NULL`**: 전체 집계.
### 요약
- `ROLLUP((job), (deptno))`는 `job`과 `deptno`를 다차원적으로 그룹화하여 각 조합에 대한 집계와 그 상위 집계를 계산합니다.
- 괄호를 사용한 `ROLLUP`은 집계 계층을 명확히 정의하여, 그룹화된 집계의 상위 집계 결과를 생성하는 데 유용합니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
cube() 인자 쓰는법 (0) | 2024.08.18 |
---|---|
roll up 인자 안에 괄호 있는 경우, 없는경우 예시로 보여줘 (0) | 2024.08.18 |
그럼 rownum은 동일한 값으로 순위 매길 경우엔? (0) | 2024.08.18 |
rownum, row_number (0) | 2024.08.18 |
rownum, row_number 동일 순위 있는 경우 (0) | 2024.08.18 |