CASE를 활용한 COUNT
Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨 — 27개 중 12번째.
집계 함수 안에 CASE 표현식을 넣을 수 있습니다. 핵심은 COUNT가 NULL을 무시한다는 점입니다. 따라서 ELSE가 없는 CASE는 조건에 맞는 행만 계산합니다.
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users이제 전체 쿼리를 필터링하지 않았음에도 불구하고 active_count는 'active' 행의 개수가 됩니다. 이것이 여러분이 작성하게 될 모든 다중 지표(multi-metric) 대시보드 쿼리의 이면에 숨겨진 비결입니다.
챌린지
쉬움사용 가능한 테이블과 컬럼:
<strong>orders</strong>:<strong>id</strong>,<strong>customer_id</strong>,<strong>status</strong>
각 customer_id별로 다음을 반환하세요:
customer_idtotal: 해당 고객이 주문한 총 횟수shipped:status = 'shipped'인 횟수cancelled:status = 'cancelled'인 횟수
최소 한 건 이상의 취소된 주문이 있는 고객만 반환하세요. customer_id를 기준으로 정렬하세요.
치트 시트
전체 쿼리를 필터링하지 않고 조건에 맞는 행의 개수를 세려면 COUNT 내부에서 CASE를 사용하세요 (COUNT는 NULL을 무시하므로 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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.