**CASE**는 SQL의 조건 표현식입니다 — 조건에 따라 다른 값을 반환하며, 쿼리 안의 if/else와 같습니다. SELECT(계산된/조건부 컬럼), ORDER BY, 집계 등에 사용되어 쿼리에 조건 로직을 더합니다.
SELECT의 CASE — 조건부 컬럼
name,
age,
age
age
age_group
users;
**CASE**는 SQL의 조건 표현식입니다 — 조건에 따라 다른 값을 반환하며, 쿼리 안의 if/else와 같습니다. SELECT(계산된/조건부 컬럼), ORDER BY, 집계 등에 사용되어 쿼리에 조건 로직을 더합니다.
name,
age,
age
age
age_group
users;
**탐색 CASE(searched CASE)**는 조건을 순서대로 평가하여 처음 매칭되는 WHEN의 값을 반환합니다. ELSE는 기본값을 제공합니다(없으면 매칭되지 않은 행은 NULL).
SELECT name,
CASE status -- 단순 형태 — status를 각 값과 비교
WHEN 'A' THEN 'Active'
WHEN 'I' THEN 'Inactive'
ELSE 'Unknown'
END AS status_label
FROM users;
-- 조건부로 카운트/합산 (매우 유용한 패턴)
SELECT
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count,
COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count,
SUM(CASE WHEN type = 'sale' THEN amount ELSE 0 END) AS sales_total
FROM orders;
-- → 하나의 쿼리에서 여러 조건부 카운트/합산 (피벗과 유사)
집계 안에서 CASE를 사용하면 단일 쿼리로 여러 조건부 카운트나 합산을 계산할 수 있습니다 — 리포팅에 강력한 기법입니다(사실상 데이터를 피벗).
ORDER BY CASE status
WHEN 'urgent' THEN 1
WHEN 'normal' THEN 2
ELSE 3
END; -- 사용자 정의 우선순위 정렬
CASE 표현식은 쿼리에 조건 로직을 더하는 다재다능하고 자주 필요한 SQL 기능입니다 — SQL에서 직접 값을 변환, 분류, 조건부 계산하므로, 실무 조회와 리포팅에 가치 있습니다.
SELECT에서 CASE를 사용하는 법(조건부/계산된 컬럼 생성 — 나이를 그룹으로 분류, 코드를 레이블로 매핑 등)을 아는 것은 쿼리 출력을 형성하는 빈번한 요구입니다.
특히 강력한 것은 집계 안에서 CASE를 사용하는 것입니다(조건부 카운팅과 합산 — 한 쿼리에서 active vs inactive 세기, 특정 유형만 합산 등) — 데이터를 사실상 피벗하여 단일 효율적 쿼리에서 여러 조건부 지표를 계산하는, 리포팅과 분석의 핵심 기법입니다. ORDER BY의 CASE는 사용자 정의 정렬 순서(우선순위 기반 정렬)를 가능하게 합니다.
탐색 형태(조건 평가)와 단순 형태(값 매칭), 그리고 CASE가 적용되는 다양한 맥락을 모두 이해하는 것은 실용적 활용을 다룹니다.
조건 로직 추가 — 데이터 분류, 리포트를 위한 조건부 집계, 사용자 정의 정렬 — 는 조회와 특히 리포팅/분석에서 흔한 요구이고, CASE가 이 로직을 SQL에서 직접 표현하는 표준적이고 유연한 방법이므로(단순 변환을 위해 데이터를 애플리케이션 코드로 끌어오는 것을 피함), CASE 표현식을 숙달하는 것은 쿼리에 표현력을 더하는 유용하고 자주 적용되는 지식이며, 특히 SQL 기반 리포팅과 데이터 분석의 중심인 조건부 집계 패턴에 가치 있습니다.