- 카테고리:
GROUP BY CUBE¶
GROUP BY CUBE는 /sql-reference/constructs/group-by-rollup`과 유사한 :doc:/sql-reference/constructs/group-by` 절의 확장명입니다. ROLLUP과 마찬가지로, CUBE는 여러 수준에서 집계된 행을 생성합니다. 그러나 ROLLUP은 자연스러운 계층 구조를 따르는 집계를 생성(예: 도시는 주로 롤업되고 주는 국가로 롤업됨)하는 반면, CUBE는 지정된 열의 가능한 모든 조합에 대한 집계를 생성합니다. 여기에는 ROLLUP이 생성하는 계층적 집계 및 각 개별 차원에 걸쳐 독립적으로 집계하는 추가 “교차 테이블” 행이 모두 포함됩니다.
CUBE은 다른 GROUP BY 식과 결합할 수 있습니다. 예를 들어 GROUP BY x, CUBE(y, z)`를 작성하여 ``x` 열을 기준으로 그룹화하고 y 및 ``z``에 대한 큐브 집계와 결합할 수 있습니다.
CUBE 그룹화는 일련의 그룹화 세트와 동일하며, 본질적으로는 더 짧은 사양입니다. CUBE 사양의 N 요소는 2^N GROUPING SETS 에 해당합니다.
참고 항목¶
:doc:`/sql-reference/functions/grouping`(각 행을 생성한 그룹화 수준을 식별하는 유틸리티 함수)
구문¶
여기서:
매개 변수¶
사용법 노트¶
Snowflake는 각 큐브에 최대 7개의 요소(128개의 그룹화 세트에 해당)를 허용합니다.
예¶
다양한 도시와 주/지역에 지점이 있는 체인점의 판매 정보가 포함된 테이블을 만들고 로딩하는 것으로 시작합니다.
모든 주에서 시, 주, 합계별로 이익을 표시하는 큐브 쿼리를 실행합니다. 아래 예는 세 가지 “수준”이 있는 쿼리를 보여줍니다.
각 도시.
각 주.
합산된 모든 수익.
이 예는 ORDER BY state, city NULLS LAST 를 사용하여 각 주의 롤업이 해당 주의 모든 도시 바로 뒤에 오고, 최종 롤업이 출력 끝에 표시되도록 합니다.
일부 롤업 행에는 NULL 값이 포함되어 있습니다. 예를 들어, 테이블의 마지막 행에는 데이터가 특정 도시 및 주가 아니라 모든 도시 및 주에 관한 것이기 때문에 시에 대한 NULL 값과 주에 대한 NULL 값이 포함됩니다.
GROUPING 유틸리티 함수는 큐브 집계의 결과인 NULL 값과 데이터의 실제 NULL 값을 구분하는 데 도움이 될 수 있습니다.
GROUP BY CUBE 및 GROUP BY ROLLUP은 모두 각 도시/주 쌍에 대해 하나의 행을 생성하며, GROUP BY 절은 모두 각 개별 주 및 모든 주가 결합된 롤업 행도 생성합니다. 두 GROUP BY 절 간의 차이는 GROUP BY CUBE는 각 도시 이름(Miami, SJ 등)에 대한 출력 행도 생성한다는 점입니다.
계층적 데이터에 GROUP BY CUBE를 사용하는 경우에는 주의하세요. 이 예제에서 SJ 행에는 CA 주의 SJ``라는 도시 및 ``PR 지역의 ``SJ``라는 도시 모두에 대한 합계가 포함되어 있습니다. 이러한 도시 간의 유일한 관계는 이름이 동일하다는 것뿐입니다. 일반적으로 계층적 데이터 분석에는 GROUP BY ROLLUP을 사용하고 독립적인 축 전반에 걸친 데이터 분석에는 GROUP BY CUBE를 사용합니다.