모든 조합을 위한 CUBE
모든 그룹화 조합을 한 번에 계산합니다.
모든 조합을 위한 CUBE은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
CUBE란 무엇인가요?
SQL의 CUBE 확장 기능은 열 목록에서 만들 수 있는 모든 그룹화 조합을 생성합니다. ROLLUP이 계층 구조를 만드는 반면, CUBE는 총합을 포함한 소계의 모든 조합을 생성합니다.
다음과 같은 요청에 답하는 기능이라고 생각하면 됩니다. "이 열들로 계산할 수 있는 모든 소계를 보여 주세요."
테이블 설정
연도, 지역, 제품 카테고리별 수익을 추적하는 sales 테이블을 사용하겠습니다. 이러한 다차원 데이터에서 CUBE의 장점이 잘 드러납니다.
CREATE TABLE sales (
year INT,
region VARCHAR(20),
category VARCHAR(20),
revenue NUMERIC(10,2)
);
INSERT INTO sales VALUES
(2023, 'North', 'Electronics', 12000),
(2023, 'North', 'Clothing', 8000),
(2023, 'South', 'Electronics', 9500),
(2023, 'South', 'Clothing', 6000),
(2024, 'North', 'Electronics', 14000),
(2024, 'North', 'Clothing', 9500),
(2024, 'South', 'Electronics', 11000),
(2024, 'South', 'Clothing', 7200);첫 CUBE 쿼리
구문은 간단합니다. GROUP BY를 GROUP BY CUBE(...)로 바꾸고 괄호 안에 열을 나열하세요. SQL이 해당 열의 모든 조합을 GROUPING SETS로 생성합니다.
SELECT
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;CUBE는 몇 개의 그룹화를 생성하나요?
n개의 열이 있을 때 CUBE는 열 목록의 모든 부분집합에 해당하는 2n개의 그룹화 세트를 생성합니다. 여기에는 빈 세트(총합)도 포함됩니다.
열이 3개(year, region, category)라면 2³ = 8개의 GROUPING SETS가 생성됩니다. 각 열 하나씩, 각 열의 쌍, 세 열 전체, 그리고 어떤 열도 포함하지 않는 조합입니다.
-- 3 columns => 8 grouping sets:
-- (year, region, category)
-- (year, region)
-- (year, category)
-- (region, category)
-- (year)
-- (region)
-- (category)
-- () <- grand total
SELECT COUNT(*) AS row_count
FROM (
SELECT year, region, category, SUM(revenue)
FROM sales
GROUP BY CUBE(year, region, category)
) sub;NULL은 상위 수준으로 집계된 차원을 나타냅니다
ROLLUP과 마찬가지로 CUBE는 열이 집계되었음을 나타내기 위해 NULL을 사용합니다. 결과 행에서 region이 NULL이면 해당 행은 나머지 열 조합에 대한 모든 지역을 요약합니다.
GROUPING(col)을 사용하여 실제 NULL 값과 집계 표시를 구분하세요.
SELECT
GROUPING(year) AS g_year,
GROUPING(region) AS g_region,
GROUPING(category) AS g_category,
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY g_year, g_region, g_category;COALESCE로 NULL을 읽기 쉽게 만들기
보고서에서 출력을 더 읽기 쉽게 하려면 각 그룹화 열을 COALESCE로 감싸고, 집계로 인해 생긴 NULL을 'ALL'과 같은 설명적인 레이블로 바꾸세요.
SELECT
COALESCE(CAST(year AS VARCHAR), 'ALL YEARS') AS year,
COALESCE(region, 'ALL REGIONS') AS region,
COALESCE(category, 'ALL CATEGORIES') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;CUBE와 ROLLUP의 핵심 차이
ROLLUP(a, b, c)는 하나의 계층 구조를 따라 소계만 생성합니다: (a,b,c), (a,b), (a), (). 왼쪽에서 오른쪽으로 나열된 순서를 따릅니다.
CUBE(a, b, c)는 ROLLUP이 완전히 건너뛰는 (a,c)나 (b)만의 조합 같은 모든 부분집합을 생성합니다. 미리 정해진 계층 구조 없이 완전한 다차원 분석이 필요할 때 CUBE를 사용하세요.
-- ROLLUP: 4 grouping sets
SELECT year, region, SUM(revenue)
FROM sales
GROUP BY ROLLUP(year, region);
-- CUBE: 4 grouping sets for 2 columns (same count here)
-- but adds the (region) subtotal that ROLLUP omits
SELECT year, region, SUM(revenue)
FROM sales
GROUP BY CUBE(year, region);부분 CUBE
일반 GROUP BY 열과 CUBE 하위 목록을 함께 사용할 수 있습니다. CUBE(...) 바깥에 나열된 열은 모든 그룹화 세트에 항상 포함되고, 안쪽에 있는 열만 모든 조합을 생성하는 방식으로 처리됩니다.
-- year is fixed; CUBE only over region and category
SELECT
year,
COALESCE(region, 'ALL REGIONS') AS region,
COALESCE(category, 'ALL CATEGORIES') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY year, CUBE(region, category)
ORDER BY year, region, category;HAVING을 사용한 CUBE 결과 필터링
HAVING은 일반적인 GROUP BY와 마찬가지로 CUBE 출력에 적용됩니다. 집계 값이 기준을 충족하지 않는 그룹화 행을 필터링할 수 있습니다. 예를 들어 총수익이 최소 기준을 초과하는 행만 남길 수 있습니다.
SELECT
COALESCE(region, 'ALL REGIONS') AS region,
COALESCE(category, 'ALL CATEGORIES') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(region, category)
HAVING SUM(revenue) > 15000
ORDER BY total_revenue DESC;CUBE와 윈도 함수 결합
CUBE 질의를 CTE로 감싼 다음 결과 내 행의 순위를 지정하거나 비교하는 윈도 함수를 적용할 수 있습니다. 이는 경영진 수준의 대시보드를 구축하는 강력한 패턴입니다.
WITH cube_result AS (
SELECT
COALESCE(region, 'ALL') AS region,
COALESCE(category, 'ALL') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(region, category)
)
SELECT
region,
category,
total_revenue,
RANK() OVER (ORDER BY total_revenue DESC) AS revenue_rank
FROM cube_result
ORDER BY revenue_rank;CUBE를 선택해야 하는 경우
CUBE는 다음과 같은 경우에 적합한 도구입니다.
- 임시 또는 OLAP 스타일 보고서에 모든 소계 조합이 필요합니다.
- 그룹화 열 사이에 자연스러운 계층 구조가 없습니다.
- 분석가가 원하는 방식으로 데이터를 세분화해 분석하도록 하고 싶습니다.
열 수가 많을 때는 CUBE를 피하십시오. 열 4개만 있어도 그룹화 집합이 16개 생성되고, 열 5개에서는 32개가 생성됩니다. 결과 집합을 관리 가능한 규모로 유지하려면 ROLLUP 또는 명시적인 GROUPING SETS를 사용하십시오.
빠른 확인
GROUP BY CUBE(a, b, c, d)는 서로 다른 그룹화 집합을 몇 개 생성합니까?
단원 요약
이 단원에서는 CUBE가 열 목록에서 가능한 모든 그룹화 집합 조합을 생성하는 방식을 배웠으며, 따라서 다차원 보고에 적합합니다.
핵심 내용:
GROUP BY CUBE(a, b, c)는 2n개의 그룹화 집합을 생성합니다.- 결과 열의
NULL은 해당 차원이 집계되었음을 의미합니다. 이를 감지하려면GROUPING()을 사용하십시오. COALESCE는 집계로 생긴NULL을 의미 있는 레이블로 바꿉니다.- 부분
CUBE(예:GROUP BY year, CUBE(region, category))는 일부 열을 고정하고 나머지 열에만 큐브를 적용합니다. - 전체 임시 분석에는
CUBE를 사용하고, 계층 구조가 이미 정해져 있거나 열 수가 많을 때는ROLLUP또는 명시적인GROUPING SETS를 사용하십시오.
자주 묻는 질문
“모든 조합을 위한 CUBE” 강의는 무료인가요?
네 — “모든 조합을 위한 CUBE” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“모든 조합을 위한 CUBE”에서 뭘 배우나요?
모든 그룹화 조합을 한 번에 계산합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“모든 조합을 위한 CUBE” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 단일 GROUP BY를 넘어
- 소계를 위한 ROLLUP
- 모든 조합을 위한 CUBE
- GROUPING SETS 설명