Data Analysis 데이터 분석/SQL 통한 Database 관리

rollup( (job),(deptno))

Queen Julia 2024. 8. 18. 17:01

`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`은 집계 계층을 명확히 정의하여, 그룹화된 집계의 상위 집계 결과를 생성하는 데 유용합니다.