MySQL
CASE로 조건 설정하기
WoodenStella
2023. 1. 11. 13:13
이번 게시글에서는 CASE를 활용한 조건 설정을 알아볼 것이다.
CASE는 조건과 그 반환값을 정의하는 것으로, 그 형태가 switch문 혹은 if문과 유사하다.
CASE의 기본 구조는
CASE - WHEN - THEN - ELSE - END
이며, select 문에 작성한다.
예시를 들어 보자.
Book테이블의 데이터 중
1. bookid와 bookname을 가져오고,
2. 가격이 30,000원 이상인 것은 A
30,000원 이하 20,000원 이상인 것은 B
20,000원 이하인 것은 C를 주며,
이상 데이터(텍스트 등) 은 null로 처리하도록 쿼리문을 작성해보겠다.
CASE문의 사용은 다음과 같이 한다.
CASE WHEN (조건1) then (결과1)
WHEN (조건2) then (결과2)
...
else (예외의 결과)
end
이에 따라 코드를 작성해보면,
select bookid, bookname, case when price>=30000 then 'A'
when price>=20000 and price <30000 then 'B'
when price<20000 then 'C'
else null
end level
from Book;
end 후에 level 이라 붙은 부분은 end as level로 바꿔 쓸 수 있으며,
이전에도 언급했듯 해당 데이터를 어떻게 통칭할지, 즉 데이터 열의 이름을 지정해주는 방식이다.
다음과 같이 실행한 결과는 다음과 같다.

Order by 등 정렬을 위해 테이블명을 지정해주는 것이 필히 요구된다.
테이블명이 지정되지 않을 시 level을 기준으로 정렬하려면 Order by 뒤에 case문 전체가 들어가야 한다.
다음과 같다.
select bookid, bookname, case when price>=30000 then 'A'
when price>=20000 and price <30000 then 'B'
when price<20000 then 'C'
else null
end
from Book
order by case when price>=30000 then 'A'
when price>=20000 and price <30000 then 'B'
when price<20000 then 'C'
else null
end;
=
select bookid, bookname, case when price>=30000 then 'A'
when price>=20000 and price <30000 then 'B'
when price<20000 then 'C'
else null
end level
from Book
order by level
이 두 코드의 결과가 같으므로, 비교적 효율적인 후자를 택하는 것이 현명하다.
이상으로 case 조건설정을 알아보았다.