쿼리를 개발하면서 WHERE절로도 표현이 안되는 경우가 있었다. 개발하면서 정형, 비정형 상관없이 WHERE절로는 한계가 있던 경우가 많아 난감했었는데, 아마 자바 개발자에겐 IF라는 함수의 논리가 쉬울 수 있으나 처음 쿼리를 접하는 이들에겐 다소 헷갈릴 수도 있는 개념이라고 생각이 든다.
이미 익숙해져버린 함수지만 분명 처음엔 생소해서 당황했던 기억이..
[ CASE WHEN [조건] THEN [조건이 참일 때 결과] ELSE [조건이 거짓일 때 결과] END AS [별칭] ]
그럼 CASE WHEN 절에 대해 실무영역에선 어떻게 쓰이는 지 경험을 빗대어 설명하겠다.
해당 데이터를 직급 기준으로 GROUP BY를 했다고 가정해보자. 그럼 아래 그림처럼 결과가 나올 것이다.
직급별로 급여를 SUM하여 표현했지만, 만약 리포트를 피벗 형태로 표현하고자 하고, 피벗 함수를 사용해 본 적이 없어 어렵다면 이럴 때 CASE WHEN 절을 사용할 수 있다. 아래 코드를 보자.
SELECT CASE WHEN '직급' = '과장' THEN SUM(급여) END AS "과장급여",
CASE WHEN '직급' = '상무' THEN SUM(급여) END AS "상무급여",
CASE WHEN '직급' = '이사' THEN SUM(급여) END AS "이사급여",
---이하 생략
FROM 테이블
WHERE 회계년도 = '2024'
GROUP BY 직급
해당 쿼리로 실행하면 아래와 같이 데이터가 표현된다.
물론, 실제로 이런 형태의 데이터는 효용 가치가 없을 것이다. 다만, CASE WHEN절의 작동 원리를 알면 피벗 대용으로 혹은 다양한 형태로 데이터를 표현할 수 있을 것이다.
마지막 예시로 ELSE 사용법이다.
만약 직급마다 금액을 차등하고 싶다면 ELSE 로 필터링 하면 된다.
SELECT CASE WHEN '직급' = '과장' THEN '급여' - 1,000,000
WHEN '직급' = '이사' THEN '급여' - 200,000
ELSE '급여' - 100,000
END AS "급여"
FROM 테이블
WHERE 회계년도 = '2024';
첫 번째 IF문은 CASE WHEN 절로 시작하며 다음 조건은 WHEN, 그리고 마지막 조건절 혹은 조건이 필요없는 데이터는 ELSE로 처리한다.
사실 CASE WHEN 절은 실무에서 분석부터 마트 개발까지 참 많이도 쓰이는 것 같다. 코딩이 익숙한 이라면 IF문 혹은 FOR문과 흡사하기 때문에 생소하지 않을수도 있겠다.