CASE 표현식과 피벗 쿼리
집계 함수 안에서 CASE WHEN을 사용해 세로형 테이블을 가로형 교차 분석 보고서로 변환합니다.
CASE 표현식과 피벗 쿼리은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
CASE: SQL의 인라인 조건문
CASE는 SQL의 삼항 연산자와 같습니다. 두 가지 형식이 있습니다.
-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
WHEN x < 0 THEN 'negative'
ELSE 'zero' END
-- Simple CASE
CASE status
WHEN 'A' THEN 'active'
WHEN 'P' THEN 'pending'
ELSE 'unknown'
ENDSELECT에서 CASE 사용
계산된 열을 만듭니다.
SELECT id, total,
CASE
WHEN total >= 1000 THEN 'whale'
WHEN total >= 100 THEN 'regular'
ELSE 'small'
END AS bucket
FROM orders;WHERE와 ORDER BY에서 CASE 사용
사용자 지정 필터링과 정렬을 적용합니다.
-- Custom sort:
ORDER BY
CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
created_at DESC;
-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
ELSE status IN ('pending','paid')
END;집계 함수 내부의 CASE: 조건부 개수 세기
피벗에 사용하는 전형적인 방법입니다.
SELECT user_id,
COUNT(*) AS total,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending,
SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;FILTER: 더 깔끔한 대안
PostgreSQL의 FILTER 절을 사용하면 더 읽기 쉽습니다.
SELECT user_id,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'paid') AS paid,
COUNT(*) FILTER (WHERE status = 'pending') AS pending,
COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;열 간에 월 피벗하기
CASE와 집계 함수를 사용해 긴 형식을 넓은 형식으로 변환합니다.
SELECT year,
SUM(CASE WHEN month = 1 THEN revenue END) AS jan,
SUM(CASE WHEN month = 2 THEN revenue END) AS feb,
-- ...
SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;범주 피벗하기
사용자마다 한 행을 만들고 상태마다 한 열을 만듭니다.
SELECT user_id,
SUM(total) FILTER (WHERE status = 'paid') AS paid_total,
SUM(total) FILTER (WHERE status = 'pending') AS pending_total
FROM orders GROUP BY user_id;CASE 피벗의 한계
작성 시점에 대상 열을 알고 있어야 합니다. 동적 피벗이 필요하다면 애플리케이션에서 SQL을 생성하거나 절차적 PL/pgSQL을 사용하셔야 합니다.
CASE와 COALESCE / NULLIF 비교
COALESCE는 "처음 나오는 NULL이 아닌 값"을 의미하고, NULLIF는 "같으면 NULL"을 의미합니다. CASE가 더 일반적이므로 COALESCE나 NULLIF로 해결하기 어려울 때 사용하시면 됩니다.
형식 호환성
CASE의 모든 분기는 호환되는 형식을 반환해야 합니다. 서로 다른 형식을 섞는다면 명시적으로 형 변환을 하셔야 합니다.
SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;중첩 CASE
여러 단계로 분기합니다.
SELECT CASE
WHEN amount IS NULL THEN 'no payment'
WHEN amount = 0 THEN 'free'
WHEN amount < 10 THEN 'cheap'
ELSE
CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;복습
CASE는 SQL에서 사용하는 보편적인 "조건/그렇지 않으면" 구문입니다.
- SELECT에서 계산된 열 만들기
- CASE를 집계 함수 또는 FILTER와 함께 사용해 피벗하기
- 사용자 지정 WHERE / ORDER BY 로직
빠른 확인
PostgreSQL에서 조건부 집계에 가장 읽기 쉬운 절은 무엇일까요?
AI 튜터와 함께 SQL을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 46
- 레슨
- 183
자주 묻는 질문
“CASE 표현식과 피벗 쿼리” 강의는 무료인가요?
네 — “CASE 표현식과 피벗 쿼리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“CASE 표현식과 피벗 쿼리”에서 뭘 배우나요?
집계 함수 안에서 CASE WHEN을 사용해 세로형 테이블을 가로형 교차 분석 보고서로 변환합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“CASE 표현식과 피벗 쿼리” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.