조건 로직: CASE·DECODE·IIF
5. 자주 하는 실수 (Tip)
실수 1: 조건 순서를 정리하지 않고 아무렇게나 나열한다
예제 4 에서 봤듯이 넓은 조건을 먼저 두면 그 뒤 조건은 영영 평가되지 않습니다. 구간을 나누는 CASE 를 쓸 때는 가장 크거나 가장 좁은 기준부터 위에 두는 순서를 습관으로 삼습니다.
실수 2: ELSE 를 깜빡해 집계에 예상 못 한 NULL 이 섞인다
ELSE 없는 CASE 를 SUM 이나 다른 계산식에 넣으면, 조건에 안 맞는 행은 NULL 로 빠지고 그 행이 계산에서 조용히 사라집니다. 변형 2 의 COUNT(CASE ...) 처럼 "세지 않으려는" 의도라면 괜찮지만, 의도한 게 아니라면 ELSE 로 기본값을 명시합니다.
실수 3: DECODE·단순 CASE 의 NULL 비교를 헷갈린다
변형 5 처럼 DECODE 는 NULL 을 값으로 취급해 일치시키지만 단순 CASE 는 그렇지 않습니다. NULL 여부로 분기해야 한다면 DB 함수 이름과 상관없이 검색 CASE 의 WHEN col IS NULL 을 쓰는 습관이 가장 안전합니다.
실수 4: WHERE 절의 CASE 를 지나치게 복잡하게 쓴다
예제 6 처럼 WHERE 안의 CASE 는 부서마다 기준이 다를 때는 유용하지만, 조건이 단순히 AND·OR 로 풀리는 경우까지 CASE 로 감싸면 오히려 읽기 어려워집니다. WHERE 절에 CASE 로 계산한 값을 비교하면 옵티마이저가 인덱스를 못 타는 경우도 많으므로, 먼저 단순 비교로 줄일 수 있는지 확인합니다.