문제
GROUP BY ROLLUP(부서, 직급)을 수행할 때 생성되는 집계(그룹핑) 조합을 (부서, 직급) 형태로 나타냈다. 이 중 ROLLUP의 결과에 포함되지 않는 조합은? (여기서 a=특정 부서, b=특정 직급, NULL=소계 표시)
① (a, b) ② (a, NULL) ③ (NULL, b) ④ (NULL, NULL)
정답
3번
해설
정답은 ③이다. ROLLUP(부서, 직급)은 지정한 컬럼의 '계층적 부분합'만 만든다. 즉 (부서, 직급) 상세 → (부서) 소계 → 전체합계 순으로 오른쪽 컬럼부터 차례로 제거한 조합만 생성하므로 그 결과는 (a,b), (a,NULL), (NULL,NULL) 세 종류다. ③ (NULL, b)처럼 '앞 컬럼(부서)만 없애고 뒤 컬럼(직급)만 남긴' 조합은 ROLLUP에서는 만들어지지 않는다. 이 (NULL, b) 조합까지 모두 얻으려면 대칭적으로 모든 부분집합을 생성하는 CUBE(부서, 직급)를 사용해야 한다. 보충: ROLLUP은 n+1개, CUBE는 2ⁿ개의 그룹핑 집합을 만든다. 특정 조합만 필요하면 GROUPING SETS로 명시한다.