`CUBE` 함수의 작동 방식을 이해하기 위해, 실제 데이터와 함께 예시를 살펴보겠습니다.
### 예시 데이터:
가정해보겠습니다. 다음과 같은 테이블이 있다고 가정하겠습니다:
```sql
CREATE TABLE EMPLOYEES (
DEPTNO INT,
JOB VARCHAR(50),
SALARY INT
);
INSERT INTO EMPLOYEES (DEPTNO, JOB, SALARY) VALUES (10, 'MANAGER', 1000);
INSERT INTO EMPLOYEES (DEPTNO, JOB, SALARY) VALUES (10, 'CLERK', 500);
INSERT INTO EMPLOYEES (DEPTNO, JOB, SALARY) VALUES (20, 'MANAGER', 1500);
INSERT INTO EMPLOYEES (DEPTNO, JOB, SALARY) VALUES (20, 'CLERK', 800);
INSERT INTO EMPLOYEES (DEPTNO, JOB, SALARY) VALUES (30, 'CLERK', 700);
```
이제 `GROUP BY CUBE(DEPTNO, JOB)`을 사용하여 이 테이블에서 데이터를 그룹화해 보겠습니다.
### CUBE 구문:
```sql
SELECT DEPTNO, JOB, SUM(SALARY) AS TOTAL_SALARY
FROM EMPLOYEES
GROUP BY CUBE(DEPTNO, JOB);
```
### 결과:
위의 쿼리는 다음과 같은 결과를 생성합니다:
| DEPTNO | JOB | TOTAL_SALARY | |
| ------ | ------- | ------------ | --------------------------------------- |
| 10 | MANAGER | 1000 | |
| 10 | CLERK | 500 | |
| 10 | NULL | 1500 | <-- DEPTNO = 10의 모든 직업(SUM) |
| 20 | MANAGER | 1500 | |
| 20 | CLERK | 800 | |
| 20 | NULL | 2300 | <-- DEPTNO = 20의 모든 직업(SUM) |
| 30 | CLERK | 700 | |
| 30 | NULL | 700 | <-- DEPTNO = 30의 모든 직업(SUM) |
| NULL | MANAGER | 2500 | <-- 모든 DEPTNO에서 JOB = 'MANAGER'인 경우의 합계 |
| NULL | CLERK | 2000 | <-- 모든 DEPTNO에서 JOB = 'CLERK'인 경우의 합계 |
| NULL | NULL | 4500 | <-- 전체 합계 |
### 설명:
- `CUBE(DEPTNO, JOB)`는 `DEPTNO`와 `JOB`의 모든 조합을 그룹화합니다.
- 각 `DEPTNO` 내의 `JOB`에 대한 합계뿐만 아니라, 모든 `DEPTNO`에 대해 `JOB`별로 합계를 계산합니다.
- 최종적으로 `DEPTNO`와 `JOB`이 모두 `NULL`인 행은 전체 합계를 나타냅니다.
이 예시에서 `CUBE` 구문은 다양한 그룹화 조합에 대한 합계를 모두 보여줍니다. 이는 데이터의 다양한 집계를 한 번에 볼 수 있게 해주는 강력한 기능입니다.
![[Screenshot 2024-08-17 at 11.11.03 AM.png]]