본문 바로가기

SQLD 공부

SQLD 공부 3. SQL의 활용 - 집계 쿼리 `GROUPING SETS`, `ROLLUP`, `CUBE`

`GROUPING SETS`, `ROLLUP`, `CUBE`는 SQL에서 집계 쿼리를 확장하여 다양한 집계 결과를 생성할 수 있게 하는 기능입니다. 이들은 특히 복잡한 그룹별 집계 작업을 간단하게 작성할 수 있게 도와줍니다.

### 1. GROUPING SETS

`GROUPING SETS`는 여러 그룹화 집합을 명시적으로 지정하여 집계 쿼리를 작성할 수 있게 합니다. 이를 통해 다양한 그룹 조합에 대한 집계 결과를 한 번에 얻을 수 있습니다.

#### 예시:

```sql
SELECT dept_id, job_id, COUNT(*)
FROM employees
GROUP BY GROUPING SETS ((dept_id), (job_id), (dept_id, job_id));
```

이 쿼리는 다음 세 가지 집계 결과를 반환합니다:
1. `dept_id`별 집계
2. `job_id`별 집계
3. `dept_id`와 `job_id`의 조합별 집계

### 2. ROLLUP

`ROLLUP`은 계층적 집계를 수행하며, 지정된 순서대로 각 단계별 소계와 총계를 포함한 집계 결과를 생성합니다. 이는 주로 보고서에서 소계와 총계를 계산할 때 유용합니다.

#### 예시:

```sql
SELECT dept_id, job_id, COUNT(*)
FROM employees
GROUP BY ROLLUP (dept_id, job_id);
```

이 쿼리는 다음과 같은 결과를 반환합니다:
1. `dept_id`와 `job_id`의 조합별 집계
2. `dept_id`별 집계
3. 전체 총계

결과는 다음과 같이 나타납니다:

| dept_id | job_id | COUNT(*) |
|---------|--------|----------|
| 10      | A      | 2        |
| 10      | B      | 3        |
| 10      | NULL   | 5        |
| 20      | A      | 4        |
| 20      | B      | 1        |
| 20      | NULL   | 5        |
| NULL    | NULL   | 10       |

### 3. CUBE

`CUBE`는 지정된 모든 컬럼 조합에 대한 집계 결과를 생성합니다. 이는 가능한 모든 그룹화 조합을 계산하여, 다차원 집계 결과를 제공하는 데 유용합니다.

#### 예시:

```sql
SELECT dept_id, job_id, COUNT(*)
FROM employees
GROUP BY CUBE (dept_id, job_id);
```

이 쿼리는 다음과 같은 모든 조합의 집계 결과를 반환합니다:
1. `dept_id`와 `job_id`의 조합별 집계
2. `dept_id`별 집계
3. `job_id`별 집계
4. 전체 총계

결과는 다음과 같이 나타납니다:

| dept_id | job_id | COUNT(*) |
|---------|--------|----------|
| 10      | A      | 2        |
| 10      | B      | 3        |
| 10      | NULL   | 5        |
| 20      | A      | 4        |
| 20      | B      | 1        |
| 20      | NULL   | 5        |
| NULL    | A      | 6        |
| NULL    | B      | 4        |
| NULL    | NULL   | 10       |

### 결론

`GROUPING SETS`, `ROLLUP`, `CUBE`는 집계 쿼리를 보다 강력하고 유연하게 만들어 주는 SQL 기능입니다. 이들을 활용하면 복잡한 그룹화와 집계를 간단하게 수행할 수 있으며, 다양한 집계 시나리오를 효율적으로 처리할 수 있습니다.

- `GROUPING SETS`: 명시적으로 여러 그룹화 집합을 지정
- `ROLLUP`: 계층적 집계로 소계와 총계를 포함
- `CUBE`: 모든 가능한 그룹화 조합에 대한 집계

이러한 기능을 잘 활용하면 데이터 분석 및 보고서 작성이 훨씬 간편해집니다.