Menu
Coddy logo textTech

CASE를 활용한 COUNT

Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨 — 27개 중 12번째.

집계 함수 안에 CASE 표현식을 넣을 수 있습니다. 핵심은 COUNTNULL을 무시한다는 점입니다. 따라서 ELSE가 없는 CASE는 조건에 맞는 행만 계산합니다.

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

이제 전체 쿼리를 필터링하지 않았음에도 불구하고 active_count'active' 행의 개수가 됩니다. 이것이 여러분이 작성하게 될 모든 다중 지표(multi-metric) 대시보드 쿼리의 이면에 숨겨진 비결입니다.

challenge icon

챌린지

쉬움

사용 가능한 테이블과 컬럼:

  • <strong>orders</strong>: <strong>id</strong>, <strong>customer_id</strong>, <strong>status</strong>

customer_id별로 다음을 반환하세요:

  • customer_id
  • total: 해당 고객이 주문한 총 횟수
  • shipped: status = 'shipped'인 횟수
  • cancelled: status = 'cancelled'인 횟수

최소 한 건 이상의 취소된 주문이 있는 고객만 반환하세요. customer_id를 기준으로 정렬하세요.

치트 시트

전체 쿼리를 필터링하지 않고 조건에 맞는 행의 개수를 세려면 COUNT 내부에서 CASE를 사용하세요 (COUNTNULL을 무시하므로 ELSE 절을 생략합니다):

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

직접 해보기

SELECT customer_id,
       COUNT(*) AS total,
       -- COUNT(CASE ...)를 사용하여 shipped, cancelled 처리
FROM orders
GROUP BY customer_id
-- 최소 한 번의 취소가 있는 고객으로 필터링
ORDER BY customer_id
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

심화 과정의 모든 레슨