문제
다음 SQL의 실행 결과로 가장 적절한 것은?
SQLSELECT DEPT, JOB, CASE WHEN GROUPING(DEPT)=1 AND GROUPING(JOB)=1 THEN '전체합계' WHEN GROUPING(DEPT)=0 AND GROUPING(JOB)=1 THEN DEPT||'소계' ELSE DEPT||'-'||JOB END AS LEVEL_INFO, SUM(SAL) AS TOTAL FROM EMP WHERE DEPT IN ('10','20') GROUP BY CUBE(DEPT, JOB) ORDER BY DEPT, JOB;
① CUBE는 4가지 그룹핑을 생성하며, LEVEL_INFO에 '전체합계', '부서소계', '직책소계', '상세' 4가지 레벨이 표시된다 ② ROLLUP과 동일하게 3가지 그룹핑만 생성되며, JOB별 소계는 표시되지 않는다 ③ GROUPING 함수 조합이 잘못되어 오류가 발생한다 ④ ORDER BY로 인해 소계 행들이 맨 아래로 이동한다
정답
1번
해설
① CUBE(DEPT,JOB)는 (DEPT,JOB), (DEPT), (JOB), () 4가지 그룹핑을 생성합니다. CASE문의 GROUPING 함수 조합으로 각각 상세, 부서소계, 직책소계, 전체합계 레벨을 구분하여 표시합니다. ② CUBE는 ROLLUP보다 많은 그룹핑을 생성하며, JOB별 소계도 포함됩니다. ③ GROUPING 함수 사용법이 올바릅니다. ④ ORDER BY는 정렬만 수행하며, 소계 행의 위치는 그룹핑 결과에 따라 결정됩니다.