메인 콘텐츠로 건너뛰기

GROUPING

ROLLUPCUBE는 GROUP BY의 수정자입니다. 둘 다 소계를 계산합니다. ROLLUP은 (day, month, year)와 같이 정렬된 컬럼 목록을 받아, 집계의 각 수준에 대한 소계와 마지막으로 전체 합계를 계산합니다. CUBE는 지정된 컬럼의 가능한 모든 조합에 대한 소계를 계산합니다. GROUPING은 ROLLUP 또는 CUBE가 반환한 행 중 어떤 것이 상위 집계 행인지, 그리고 어떤 것이 수정되지 않은 GROUP BY에서 반환되는 행인지를 식별합니다. GROUPING 함수는 여러 컬럼을 인수로 받아 비트마스크를 반환합니다.
  • 1GROUP BYROLLUP 또는 CUBE 수정자를 적용해 반환된 행이 소계임을 나타냅니다
  • 0ROLLUP 또는 CUBE가 반환한 행이 소계가 아님을 나타냅니다

GROUPING SETS

기본적으로 CUBE 수정자는 CUBE에 전달된 컬럼의 가능한 모든 조합에 대해 소계를 계산합니다. GROUPING SETS를 사용하면 계산할 조합을 구체적으로 지정할 수 있습니다. 계층형 데이터 분석에는 ROLLUP, CUBE, GROUPING SETS 수정자가 적합합니다. 여기의 예제는 두 개의 데이터 센터에 설치된 Linux 배포판과 해당 배포판의 버전에 대한 데이터를 담고 있는 테이블입니다. 이 데이터를 배포판, 버전, 위치별로 살펴보면 유용합니다.

샘플 데이터 불러오기

간단한 쿼리

각 데이터 센터에서 배포판별 서버 수를 구합니다:

GROUPING SETS를 사용해 여러 GROUP BY SQL 문 비교하기

CUBE, ROLLUP 또는 GROUPING SETS 없이 데이터를 나누면 다음과 같습니다:
GROUPING SETS를 사용해 동일한 정보 얻기:

CUBE와 GROUPING SETS 비교

다음 쿼리의 CUBE인 CUBE(datacenter,distro,version)는 그다지 적절하지 않은 계층 구조를 만듭니다. 두 배포판 전체에 걸쳐 version을 살펴보는 것은 의미가 없습니다(Arch와 RHEL은 릴리스 주기나 버전 명명 기준이 서로 다르기 때문입니다). 이어지는 GROUPING SETS 예시는 distroversion을 같은 세트로 그룹화하므로 더 적절합니다.
위 예시의 Version은 distro와 연관되지 않으면 의미가 없을 수 있습니다. 커널 버전을 추적하는 경우에는 커널 버전이 어느 distro와도 연관될 수 있으므로 의미가 있을 수 있습니다. 다음 예시처럼 GROUPING SETS를 사용하는 편이 더 나은 선택일 수 있습니다.
마지막 수정일 2026년 6월 10일