GROUP BY 절을 확장하여 다양한 수준의 집계(Subtotal)를 한 번에 계산할 수 있도록 하는 기능들입니다. SQLD 시험에서는 각 키워드의 정확한 역할과 생성하는 그룹의 조합을 묻는 문제가 자주 출제됩니다.
단계별 집계)GROUP BY의 확장으로, 지정된 컬럼들의 계층적(Hierarchical)인 부분합을 계산합니다.ROLLUP(A, B)는 (A, B), (A), 전체) 순으로 집계를 수행합니다.ROLLUP(dept, job)(dept, job) 그룹별 집계 (가장 상세한 수준)(dept) 그룹별 집계 (직무와 무관한 부서별 총합)() 그룹별 집계 (전체 총합)ROLLUP((A, B), C)는 (A,B)를 하나의 그룹으로 취급하여 (A,B,C), (A,B), () 그룹을 생성합니다. A나 B 단독 그룹은 생성되지 않습니다.ROLLUP((A), A)와 같이 중복된 컬럼은 무시됩니다.모든 조합 집계)CUBE(A, B)는 (A, B), (A), (B), () 그룹을 생성합니다.CUBE(dept, job)(dept, job) 그룹별 집계(dept) 그룹별 집계(job) 그룹별 집계() 그룹별 집계 (전체 총합)CUBE(A, B, C)는 2^3 = 8개의 조합 그룹을 생성합니다. ((A,B,C), (A,B), (A,C), (B,C), (A), (B), (C), ())NULL 판별)ROLLUP이나 CUBE로 인해 생성된 집계용 NULL 값을 구분하는 함수입니다.GROUPING(컬럼)은 다음과 같이 반환합니다.NULL일 경우: 1 반환NULL이거나 그룹의 일부일 경우: 0 반환GROUPING(컬럼)의 결과는 항상 0 또는 1입니다.GROUPING을 통해 집계 결과의 NULL과 실제 데이터의 NULL을 구분할 수 있습니다.선택적 집계)ROLLUP이나 CUBE가 생성하는 모든 그룹이 필요하지 않을 때 유용합니다.GROUPING SETS((dept), (job))dept 그룹별 합계와 job 그룹별 합계만 계산합니다.(dept, job)이나 전체 총합은 계산되지 않습니다.| 구분 | 롤업 (Rollup) | 큐브 (Cube) | 그룹핑 세트 (Grouping Sets) |
|---|---|---|---|
| 핵심 | 계층적, 순차적 부분합 | 모든 가능한 조합 | 원하는 조합만 선택 |
| 특징 | 왼쪽에서 오른쪽으로 집계 | 순서 무관, 모든 경우의 수 | 개별 그룹을 명시 |
1. ROLLUP(A, B, C)의 결과로 생성되는 그룹 조합으로 올바른 것은?
A. (A,B,C), (B,C), C, 전체
B. (A,B,C), (A,B), A, 전체
C. (A,B,C), (A,B), B, 전체
D. (A,B,C), A, B, C, 전체
2. 다음 중 CUBE(A, B)의 결과로 생성되지 않는 그룹 조합은?
A. (A, B)
B. (A)
C. (B)
D. (A, C)
3. GROUPING(컬럼) 함수에 대한 설명으로 옳은 것은?
A. NULL 값을 0으로 변환하여 반환한다.
B. 실제 NULL과 집계로 생성된 NULL을 구분하여 0 또는 1을 반환한다.
C. GROUP BY 없이 사용할 수 있다.
D. ROLLUP이나 CUBE가 아닌 일반 GROUP BY와도 함께 사용된다.
4. Users 테이블에서 A와 B의 합계, 그리고 A와 B가 모두 같은 경우의 합계만 계산하고 싶다. 다음 중 가장 효율적인 방법은?
A. GROUP BY ROLLUP(A, B)
B. GROUP BY CUBE(A, B)
C. GROUP BY GROUPING SETS((A), (B), (A, B))
D. GROUP BY A, B
ROLLUP은 왼쪽에서 오른쪽으로 순차적으로 그룹을 생성합니다. (A,B,C) → (A,B) → (A) → ()(전체 합계) 순입니다.CUBE(A, B)는 A와 B의 모든 조합을 생성합니다. A와 C의 조합은 포함되지 않습니다.GROUPING 함수는 ROLLUP이나 CUBE로 인해 생성된 집계용 NULL을 구분하는 데 사용되며, 집계 NULL일 경우 1을 반환하고, 실제 NULL이나 일반 값일 경우 0을 반환합니다.GROUPING SETS는 원하는 그룹 조합만 명시적으로 선택하여 집계할 수 있으므로, A와 B의 개별 합계와 (A, B) 조합의 합계만을 계산하는 데 가장 효율적입니다.