그룹화
GROUPING
ROLLUP과 CUBE는 GROUP BY에 대한 수정자입니다. 두 수정자 모두 소계를 계산합니다. ROLLUP은 (day, month, year)와 같은 순서가 있는 컬럼 목록을 받아 집계의 각 단계에서 소계를 계산한 뒤 최종 합계를 계산합니다. CUBE는 지정된 컬럼의 가능한 모든 조합에 대한 소계를 계산합니다. GROUPING은 ROLLUP 또는 CUBE에 의해 반환된 행 중 어떤 것이 상위 집계(superaggregate) 행이고, 어떤 것이 수정되지 않은 GROUP BY에 의해 반환되었을 행인지 식별합니다.
GROUPING 함수는 여러 컬럼을 인수로 받고, 비트마스크를 반환합니다.
1은GROUP BY에 대한ROLLUP또는CUBE수정자에 의해 반환된 행이 소계 행임을 나타냅니다.0은ROLLUP또는CUBE에 의해 반환된 행이 소계가 아닌 행임을 나타냅니다.
GROUPING SETS
기본적으로 CUBE 수정자는 CUBE에 전달된 컬럼의 가능한 모든 조합에 대한 소계를 계산합니다. GROUPING SETS를 사용하면 계산할 특정 조합을 지정할 수 있습니다.
계층적 데이터 분석은 ROLLUP, CUBE, GROUPING SETS 수정자에 적합한 사용 사례입니다. 여기 예제는 두 데이터 센터에 설치된 Linux 배포판과 해당 배포판 버전에 대한 데이터를 포함하는 테이블입니다. 이 데이터를 배포판, 버전, 위치별로 살펴보는 것이 유용할 수 있습니다.
샘플 데이터 적재
간단한 쿼리
각 데이터 센터에서 distribution별 서버 수를 조회합니다:
여러 개의 GROUP BY SQL 문과 GROUPING SETS 비교
CUBE, ROLLUP, GROUPING SETS 없이 데이터를 세분화하는 경우:
GROUPING SETS를 사용하여 동일한 정보를 조회하기:
CUBE와 GROUPING SETS 비교
다음 쿼리의 CUBE(datacenter,distro,version)은 직관적이지 않은 계층 조합을 생성합니다. Arch와 RHEL은 동일한 릴리스 주기나 버전 명명 표준을 사용하지 않기 때문에, 두 배포판 전체에 걸쳐 버전을 살펴보는 것은 적절하지 않습니다. 이어지는 GROUPING SETS 예제는 distro와 version을 동일한 그룹으로 묶기 때문에 더 적절합니다.
위 예시에서 Version 값은 특정 배포판과 연결되어 있지 않다면 의미가 없을 수 있습니다. 커널 버전을 추적하는 경우에는 커널 버전이 어느 쪽 배포판과도 연결될 수 있으므로 의미가 있을 수 있습니다. 다음 예시와 같이 GROUPING SETS를 사용하는 것이 더 나은 선택일 수 있습니다.