행을 열로 피벗하기
Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨 — 27개 중 14번째.
조건부 집계를 GROUP BY와 결합하여 행을 열로 변환하세요. 이것은 스프레드시트 피벗의 SQL 버전입니다.
sales 테이블에 (month, product, units)와 같은 행이 있다고 가정해 봅시다. 제품별로 하나의 열을 사용하여 월별로 하나의 행을 보려면 다음과 같이 작성합니다:
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b
FROM sales
GROUP BY month각 GROUP BY 버킷에서 SUM(CASE …)가 처리하는 대상은 한 달 동안의 행들이며, CASE는 특정 제품에 해당하는 부분을 선택합니다.
챌린지
쉬움사용 가능한 테이블 및 컬럼:
<strong>sales</strong>:<strong>month</strong>,<strong>product</strong>,<strong>units</strong>
각 행이 하나의 month가 되도록 데이터를 피벗하고 다음 컬럼들을 포함하세요:
monthapples: 해당 월의'apples'제품에 대한 총unitsbananas:'bananas'에 대해서도 동일하게 적용cherries:'cherries'에 대해서도 동일하게 적용total: 해당 월의 모든 제품에 대한 총units
total이 최소 20인 월만 반환하세요. month를 기준으로 정렬하세요.
치트 시트
GROUP BY와 함께 조건부 집계(conditional aggregation)를 사용하여 행을 열로 피벗(pivot)하세요:
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b,
SUM(units) AS total
FROM sales
GROUP BY month
HAVING SUM(units) >= threshold
ORDER BY month각각의 SUM(CASE …)는 각 GROUP BY 버킷 내에서 해당 제품과 일치하는 행만 합산합니다.
직접 해보기
SELECT month,
-- 제품별 SUM(CASE ...) 하나와 합계
FROM sales
GROUP BY month
-- 합계가 20 이상인 월로 필터링
ORDER BY month
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.