문제
다음 SQL 실행 결과에서 '부서별소계'가 출력되는 조건은?
SQLSELECT CASE WHEN GROUPING(DEPTNO)=0 AND GROUPING(JOB)=1 THEN '부서별소계' WHEN GROUPING(DEPTNO)=1 AND GROUPING(JOB)=1 THEN '전체합계' ELSE DEPTNO||'-'||JOB END AS 구분, COUNT(*) FROM EMP GROUP BY ROLLUP(DEPTNO, JOB);
① ROLLUP에 의해 JOB이 NULL로 집계된 행
② ROLLUP에 의해 DEPTNO가 NULL로 집계된 행
③ 원본 데이터에서 JOB이 NULL인 행
④ ROLLUP에 의해 DEPTNO, JOB 모두 NULL로 집계된 행
정답
1번
해설
GROUPING(DEPTNO)=0은 DEPTNO가 실제 값(소계 대상이 아님)을, GROUPING(JOB)=1은 JOB이 ROLLUP에 의해 NULL로 집계됨을 의미합니다. 즉 부서별로 모든 JOB을 합계한 부서별 소계 행입니다. ② DEPTNO가 NULL인 것은 전체합계 조건입니다. ③ 원본 NULL은 GROUPING=0으로 구분됩니다. ④ 두 칼럼 모두 NULL인 것은 전체합계입니다.