본문 바로가기
C.W.K.
Stream
Lesson 08 of 16 · published

CASE와 COALESCE로 조건 표현하기

~10 min · queries, expressions

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

질의 안에서 분기해

CASE는 조건에 따라 다른 값을 만들고 COALESCE는 처음 만나는 NULL 아닌 값을 골라. CASE WHEN x >= 100 THEN 'high' ... END처럼 범위를 판정하거나 CASE status WHEN 'P' THEN 'Pending' ... END처럼 정해진 값을 표시 이름으로 바꿀 수 있어.

순서가 의미를 만든다

CASE는 위에서부터 조건을 검사하므로 더 구체적인 조건을 먼저 둬. 정렬 우선순위도 ORDER BY CASE status WHEN 'urgent' THEN 1 WHEN 'normal' THEN 2 ELSE 3 END, created_at DESC처럼 데이터의 업무 순서로 표현할 수 있어.

표시용 대체값과 저장값을 구분해

COALESCE로 화면의 빈칸을 채울 수 있지만, 원래 NULL이었던 사실까지 지워서는 안 돼. 조건식은 결과를 읽기 좋게 만드는 도구이지 스키마의 불분명한 의미를 숨기는 붕대가 아니야.

Code

구간을 나누는 searched CASE·sql
SELECT id, total,
       CASE
         WHEN total >= 1000 THEN 'large'
         WHEN total >= 100  THEN 'medium'
         ELSE 'small'
       END AS order_size
FROM orders;
코드를 표시 이름으로 바꾸는 simple CASE·sql
SELECT id,
       CASE status
         WHEN 'P' THEN 'Pending'
         WHEN 'S' THEN 'Shipped'
         WHEN 'D' THEN 'Delivered'
         WHEN 'R' THEN 'Returned'
         ELSE 'Unknown'
       END AS status_label
FROM orders;
COALESCE / NULLIF / GREATEST·sql
SELECT name,
       COALESCE(nickname, first_name, 'Anonymous') AS display_name,
       NULLIF(notes, '') AS notes,             -- 빈 문자열을 NULL 로
       GREATEST(login_count, 0) AS safe_count, -- 음수 가드
       LEAST(quota, used)                       -- 둘 중 작은 값
FROM users;

External links

Exercise

사용 기간에 따라 사용자를 'new', 'regular', 'veteran'으로 나누는 SELECT의 CASE와 상태별 우선순위를 정하는 ORDER BY의 CASE를 한 질의에 써. 열 하나 이상에는 COALESCE를 적용해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.