Home » SQL » BASIC » sql case when 절로 여러 분기 처리를 해 봅시다.

sql case when 절로 여러 분기 처리를 해 봅시다.

어떤 값을 조건에 따라 다른 값으로 가공해야 할 때가 있습니다. 예를 들어, 점수가 A+이면 4.5로, A이면 4.3으로 가공해야 하는 요구 사항이 있을 수 있습니다. 이 때 사용할 수 있는 것이 sql case when 절입니다.


sql case when 절의 기본 구조

먼저, 이 구문의 기본 구조를 알아보겠습니다.

case
when condition1 then value1

when conditionn then valuen
else valueo
end

condition1 을 만족하면 value1 이 되고

conditionn 을 만족하면 valuen 이 됩니다.
모든 case 절에 걸리지 않으면 valueo가 됩니다.

switch 문과 유사하다고 생각하시면 편합니다.

이런 그림이라고 생각하시면 편해요. cond(1)을 만족하면, value(1)이 출력됩니다. 그게 아니라면

  • cond(2)를 검사합니다.
    • 만약에 조건을 만족하면 value(2)가 출력됩니다.
    • 그게 아니라면 밑으로 내려갑니다.
  • 이렇게 모든 cond를 만족하지 않은 경우
    • else 절에 걸립니다.

간단한 예제 몇 개를 보도록 할게요.


예제 1

상품의 코드 앞 글자가 ‘B’이면 책, ‘F’ 이면 음식이라 해 볼게요.

[그림 1] product 테이블에 있는 데이터

product_name은 F 또는 B로만 시작해요. 우리는 product_name에 따라, Book 혹은 Food를 출력하고 싶어요. 이럴 때 어떻게 하면 될까요?

순서도를 그리면 요래 걸립니다. product_name의 1번째 글자를 따 오기 위해서

  • left 함수를 이용합니다.
  • left(product_name, 1)을 이용하면 됩니다.

이 값이 ‘F’이면 ‘Food’가 되겠군요. ‘B’이면 ‘Book’이지요?

[그림 2] 예제 1번의 쿼리

따라서, case when 절을 이용해 쿼리를 작성하면 위와 같습니다.

  • 1번째 when 절에서, product_name의 1번째 글자가 ‘F’이면 ‘Food’ 를 출력합니다.
  • 1번째 when 절의 조건을 만족하지 않으면
    • 2번째 when 절이 걸립니다.
    • product_name의 1번째 글자가 ‘B’이면 ‘Book’을 출력합니다.

그러면 결과가 어떻게 나올까요?

[그림 3] 예제 1번 쿼리의 결과

product name이 F로 시작하면 Food가, B로 시작하면 Book이 나왔습니다. 물론 이렇게 간단한 예제인 경우, if 절로 처리해도 무난합니다.

  • 조건이 하나이고
    • 조건을 만족하면 특정 값을 출력하고
    • 해당 조건에 만족하지 못하면 다른 값을 출력하는 형태.

조건이 둘 이상이면 if 대신 case when 절을 쓰는 게 좋습니다.


예제 2

예제 2번은 A+, A와 같은 성적을 4.5, 4.3 등의 평점으로 변환시킵니다.

[그림 4] takes 테이블

takes 테이블은 section과 student에서 쓰게 되는데요. 이 예제에서는 문자 형태로 표현된 takes의 grade를 실수 형태의 4.5, 4.3 등으로 변환합니다.

[그림 5] takes 테이블과 grade

A+는 4.5, A는 4.3, A-는 4.0 등으로 변환한다고 가정해 봅시다. 그러면 우리는 조건을

  • grade가 A+이면 4.5
  • grade가 A+이 아닌 A이면 4.3

요런 식으로 변환할 수 있습니다. 역시 각각의 condition은 when 절에 붙이고, 값은 then 절에 붙이기만 하면 됩니다.

그림으로 그리면 이런 상황입니다. 따라서, 쿼리는 아래와 같이 작성하면 됩니다.

[그림 6] 예제 2번의 쿼리

학점은 A+부터 D-까지 있으므로, 12개의 조건에 대해 case when 절로 처리하였습니다. 만약에, D- 이하인 경우에는 어떨까요? 이 경우

  • 어떠한 when 절에도 걸리지 않습니다. 이 때, 0이라는 값을 주고 싶은 경우
  • else 절에 0을 주면 됩니다.

else 절은 어떠한 when 절에도 걸리지 않을 때 처리되는 부분이기 때문입니다. 결과를 봅시다.

[그림 7] 예제 2번 쿼리의 결과

grade가 C-인 경우 2가, B-인 경우 3이 정상적으로 출력되었음을 볼 수 있습니다.

Leave a Comment

18 − 12 =