`GROUPING SETS(DEPTNO, JOB, (DEPTNO), (JOB), ())` 함수의 실제 예시를 보여드리겠습니다. 이 구문은 지정된 여러 그룹화 조합에 대해 별도의 집계 결과를 생성합니다. ### 예시 데이터: 먼저, 예시 데이터를 포함하는 `EMPLOYEES` 테이블을 가정합니다: ```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 GROUPING SETS 구문: ```sql SELECT DEPTNO, JOB, SUM(SALARY) AS TOTAL_SALARY FROM EMPLOYEES GROUP BY GROUPING SETS( (DEPTNO, JOB), (DEPTNO), (JOB), () ); ``` ### 결과: 이 구문은 다음과 같은 결과를 생성합니다: | DEPTNO | JOB | TOTAL_SALARY | |--------|---------|--------------| | 10 | MANAGER | 1000 | <-- (DEPTNO, JOB) 그룹 | 10 | CLERK | 500 | <-- (DEPTNO, JOB) 그룹 | 20 | MANAGER | 1500 | <-- (DEPTNO, JOB) 그룹 | 20 | CLERK | 800 | <-- (DEPTNO, JOB) 그룹 | 30 | CLERK | 700 | <-- (DEPTNO, JOB) 그룹 | 10 | NULL | 1500 | <-- (DEPTNO) 그룹 | 20 | NULL | 2300 | <-- (DEPTNO) 그룹 | 30 | NULL | 700 | <-- (DEPTNO) 그룹 | NULL | MANAGER | 2500 | <-- (JOB) 그룹 | NULL | CLERK | 2000 | <-- (JOB) 그룹 | NULL | NULL | 4500 | <-- 전체 합계 ### 설명: - `GROUPING SETS(DEPTNO, JOB)`는 각 `(DEPTNO, JOB)` 조합에 대해 그룹화합니다. 즉, 각 부서의 각 직업에 대한 급여 합계를 계산합니다. - `GROUPING SETS((DEPTNO))`는 `DEPTNO`별로만 그룹화하여 각 부서의 총 급여를 계산합니다. - `GROUPING SETS((JOB))`는 `JOB`별로만 그룹화하여 각 직업의 총 급여를 계산합니다. - `GROUPING SETS(())`는 전체 합계를 계산합니다. ### 차이점: 이 구문은 `CUBE`와 유사하지만, `GROUPING SETS`를 사용하면 특정 그룹화 조합만 선택적으로 집계할 수 있습니다. 예를 들어, `(DEPTNO, JOB)`와 `(JOB, DEPTNO)`를 별도로 그룹화하지 않고, 각각 `(DEPTNO)`와 `(JOB)`에 대해서만 그룹화하는 식입니다. 따라서, `GROUPING SETS`는 `CUBE`처럼 모든 조합을 생성하지 않고, 필요에 따라 그룹화 조합을 지정하는 더 유연한 방법입니다. ![[Screenshot 2024-08-17 at 11.11.03 AM.png]]