홈 › SQL 고급 › 06 / 10

소계와 총계

ROLLUP, CUBE, GROUPING SETS
섹션 6진행 0 / 10

6. 정리

ROLLUP, CUBE, GROUPING SETS 는 한 번의 GROUP BY 로 여러 단계의 집계를 만듭니다. ROLLUP(a, b) 는 (a,b), (a), () 세 단계이고, CUBE(a, b) 는 (a,b), (a), (b), () 네 조합이며, GROUPING SETS 는 조합을 직접 고릅니다. 소계로 합쳐진 컬럼은 NULL 로 나옵니다.

소계와 진짜 NULL 은 GROUPING(컬럼) 으로 구분합니다. 소계 행의 정렬 위치는 DB 가 보장하지 않으므로 ORDER BY 에 GROUPING() 을 씁니다. 지원은 Oracle 8i, MSSQL 2008(옛 형식은 WITH ROLLUP), MySQL 은 WITH ROLLUP 만이고 GROUPING() 은 8.0 부터입니다.

문법이 없는 환경에서는 UNION ALL 로 단계마다 쿼리를 붙이고, 구분 컬럼 lvl 로 정렬과 라벨을 처리합니다. H2 는 세 문법이 모두 미지원이라 이 레슨의 실행 예제는 대체 쿼리였고, 표준 문법의 결과는 같은 값의 도식으로 보였습니다.

다음 레슨은 WITH 절(CTE)로 복잡한 쿼리를 단계별로 구조화하는 방법입니다. 집계는 중급 10, 행을 열로 돌리는 방법은 고급 05 PIVOT 을 참고하세요.