`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`: 모든 가능한 그룹화 조합에 대한 집계
이러한 기능을 잘 활용하면 데이터 분석 및 보고서 작성이 훨씬 간편해집니다.
'SQLD 공부' 카테고리의 다른 글
계층형 질의 (0) | 2024.05.19 |
---|---|
SQLD 공부 3. SQL 활용 - 집합 연산자(Set Operator) (0) | 2024.05.18 |
SQLD 공부 3. SQL 활용 - 서브쿼리 (0) | 2024.05.18 |
SQLD 공부 2. SQL 기본 (0) | 2024.05.18 |
SQLD 공부 1. 데이터 모델링의 이해 (2) | 2024.05.18 |