SQL Academy · 강의

CASE 표현식과 피벗 쿼리

집계 함수 안에서 CASE WHEN을 사용해 세로형 테이블을 가로형 교차 분석 보고서로 변환합니다.

레슨 3/413개 단계

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'
END

SELECT에서 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. UNION, INTERSECT, EXCEPT
  2. UNION ALL과 UNION 비교(중복 제거 비용)
  3. CASE 표현식과 피벗 쿼리
  4. 교차 집계 패턴(PostgreSQL crosstab())
← SQL Academy(으)로 돌아가기