본문 바로가기
MS SQL

CASE WHEN 함수 사용법, SELECT , UPDATE, WHERE 절 활용 방법

by 디디찐 2023. 8. 3.
반응형

CASE WHEN 함수 사용법과 활용법에 대해서 소개하겠습니다. MS SQL 에서 CASE WHEN 은 조건에 따라 다른 값을 반환할 수 있어 데이터 처리나 필드 값을 변환하는데 매우 유용합니다. SELECT, WHERE, UPDATE, ORDER BY 에서 다양한 방면으로 활용할 수 있습니다.

자바스크립트에서 IF문 혹은  SWITCH 문과 비슷한 성질을 가지고 있습니다. 

 

CASE WHEN 함수란? 

 

 

 

CASSE WHEN은 데이터를 분류하거나 조건에 따라 값을 변경해야 할 때 사용됩니다. 상황에 따라 여러 가지 경우를 처리해야 하는 상황에서 유용하게 활용되며 기본 문법은 다음과 같습니다:

 

CASE WHEN 조건식1 THEN 조건에 맞을 시 대체할 값1
           WHEN 조건식2 THEN 조건에 맞을 시 대체할 값2
    ...
           ELSE 어느 조건에도 일치하지 않을 경우 값 N
END

 

혹은


CASE  판별 대상 WHEN 조건1 THEN 조건에 맞을 시 대체할 값1
                            WHEN 조건2 THEN 조건에 맞을 시 대체할 값2
    ...
           ELSE 어느 조건에도 일치하지 않을 경우 값 N
END

 

각 조건을 유효하게 평가하고 첫 번째로 참인 조건에 해당하는 값을 반환하고, 모든 조건에 해당하지 않을 경우 ELSE 뒤에 정의한 값N 이 반환됩니다.


SELECT 문에서 CASE WHEN 함수

SELECT 문에서 CASE WHEN 함수는 특정 조건에 따라 값을 조건부로 계산하거나 데이터를 분류하기 위해 SELECT 문 내에서 자주 사용됩니다. 

 

 

제품 ID 상품명 재고수량
1 A 100
2 B 50
3 C 200

<상품리스트 테이블>

 

예시1) 위와 같이 상품리스트 테이블이 있다고 할 때 재고수량에 따라 [낮은 재고 / 중간 재고 / 높은 재고] 로 분류하는 새 열을 생성한다고 할 때 CASE WHEN 문을 사용할 수 있습니다.

SELECT 제품ID, 상품명, 재고수량, 
       CASE 
       	WHEN 재고수량 <= 50 THEN '낮은 재고'
        WHEN 재고수량 <= 150 THEN '중간 재고'
        ELSE '높은 재고' 
       END AS '재고수준' 
 FROM 상품리스트

 

제품 ID 상품명 재고수량 재고수준
1 A 100 중간 재고
2 B 50 낮은 재고
3 C 200 높은 재고

<예시 1 결과>

 

이런 식으로 재고수량에 값에 따라 새 열의 값을 정의할 수 있습니다.

또한 기존의 테이블 데이터를  조건에 따라 원하는 값으로 치환하여 출력할 수도 있습니다. 

 

 

 

 

 

예시2) 상품리스트 테이블에서 A 라는 상품명은 APPLE, B는 BANANA, C는 CHERRY 로 출력하고 싶을 때도 CASE WHEN 함수를 활용할 수 있습니다.

SELECT 제품ID
      , CASE 상품명
       	        WHEN 'A' THEN 'APPLE'
                WHEN 'B' THEN 'BANANA'
                WHEN 'C' THEN 'CHERRY'
        END AS '재고수준' 
       ,재고수량
 FROM 상품리스트
제품ID 상품명 재고수량
1 APPLE 100
2 BANANA 50
3 CHERRY 200

<예시 2의 결과>

이런 식으로 기존의 컬럼 데이터를 원하는 값으로 값을 정의할 수도 있습니다.

사실 두 번째 예시처럼 사용할 경우에는 다른 함수를 통해서도 구현할 수 있습니다.

이전 저의 글을 참고해주세요.  ▶문자열-관련-함수1-정리

 

MS SQL_문자열 관련 함수 정리1(문자열 자르기, 특정 문자 위치 찾기, 문자열 치환, 공백 제거)

1. 문자열 자르기 함수 (SUBSTRING, LEFT, RIGHT) SUBSTRING (문자열, 시작위치, 길이) 문자열을 원하는 시작위치부터 길이만큼 잘라주는 함수 LEFT (문자열, 길이) : 문자열을 왼쪽부터 원하는 길이만큼 자르

jjin-todo.tistory.com


UPDATE 문에서 CASE WHEN 함수

UPDATE 문에서 CASE WHEN 함수는 특정 조건에 따라 데이터를 수정할 때 사용할 수 있습니다. 

직원ID 직원명 급여
1 박지성 3000
2 홍길동 2500
3 김민수 2000

<직원 테이블>

 

예시) 현재 급여가 2500 미만인 직원의 급여를 10% 인상한다고 할 때  UPDATE 문에서 CASE WHEN 함수를 사용할 수 있습니다.

UPDATE 직원
SET 급여 = (CASE 
                WHEN 급여 < 2500 THEN 급여 * 1.1  -- 10% salary raise
                ELSE 급여
            END)
직원ID 직원명 급여
1 박지성 3000
2 홍길동 2500
3 김민수 2200

<예시 결과>

UPDATE 할 값을 CASE WHEN 문으로 작성할 때 현재 급여를 기준으로 조건에 맞는 값들을 10% 인상되어 업데이트 되고 아닌 값들은 업데이트 되지 않는 결과로 볼 수 있습니다. 


WHERE 절에서 CASE WHEN 함수 

WHERE 절에서 CASE WHEN 함수는 특정 조건에 따라 데이터를 필러링하여 출력할 때도 사용됩니다. 

UPDATE 문에서 예시로 사용한 직원 테이블을 사용하여 사용 예시를 보여드리겠습니다. 

SELECT 직원ID, 직원명, 급여
FROM 직원
WHERE CASE
       WHEN 직원명 = '박지성' THEN '축구선수'
       WHEN 직원명 = '홍길동' THEN '도적'
       ELSE '일반' 
      END  = '축구선수'

 

직원ID 직원명 급여
1 박지성 3000

<예시 결과>

WHERE 절에서 직원명에 따라 '축구선수' 로 지정한 직원을 필터링하여 출력하도록 사용하였습니다. 쿼리는 지정된 조건을 충족하는 직원 레코드를 반환합니다.


ORDER BY 절에서 CASE WHEN 함수

ORDER BY 절에서 CASE WHEN 함수는 특정 지정 정렬 조건으로 쿼리 결과를 유연하게 정렬할 수 있습니다. ORDER BY 절은 하나 이상의 열을 기준으로 오름차순(ASC), 내림차순(DESC) 순서로 결과 집합을 정렬하는데 사용됩니다. 

이를 CASE WHEN 을 통해 사용하면 이렇습니다. 

 

직원ID 부서 이름
1 인사팀 박지성
2 IT팀 김하나
3 회계팀 김민수
4 회계팀 안기수
5 IT팀 홍미정

<부서테이블>

예시) 부서 IT팀 - 인사팀- 회계팀 순으로 정렬되도록 하고, 이후 정렬은 이름을 기준으로 오름차순으로 출력하고자 할 때 ORDER BY 에 CASE WHEN을 사용할 수 있습니다.

SELECT 직원ID, 부서, 이름
FROM 부서
ORDER BY CASE 
	    WHEN 부서  = 'IT팀' THEN 1
            WHEN 부서 = '인사팀' THEN 2
	    ELSE = '3' 
          END , 이름 ASC
직원ID 부서 이름
2 IT팀 김하나
5 IT팀 홍미정
1 인사팀 박지성
3 회계팀 김민수
4 회계팀 안기수

<결과>

부서를 기준으로 사용자 지정 정렬 그룹을 생성하여 IT 팀이 먼저 나타나고, 그 다음은 인사팀, 마지막으로 회계팀으로 나타나게 됩니다. 각 부서 내에서 이름은 오름차순으로 정렬됩니다.


결론

 

 

 

MS SQL 의 CASE WHEN 함수는 SELECT, UPDATE, WHERE, ORDER BY 내에서 조건부 연산을 수행할 수 있는 다목적 도구입니다. 구문과 다양한 응용 방법을 이해함으로써 특정 요구 사항을 충족하도록 데이터를 효율적으로 처리하고 반환할 수 있습니다. 제가 작성한 게시물을 통해 MS SQL 에서 CASE WHEN 함수를 자신 있게 사용하시길 바랍니다.

반응형