DATABASE

[MySQL] CASE WHEN THEN 구문 알아보기

yoonddo 2023. 7. 6. 16:35

MySQL에서 CASE문은 조건에 따라 다른 동작을 수행하도록 하는 제어 구조이다. 일반적으로 SELECT문과 함께

사용되며 SELECT문에서 결과값을 처리하거나 검색시 조건부 로직을 사용해야 하는 경우 유용하다.

 

CASE문은 WHEN의 조건을 순차적으로 체크한 후 조건이 만족한다면 그에 해당하는 THEN 뒤의 값을 반환한다.

모든 조건을 충족하지 않는다면 마지막 ELSE에 해당하는 값을 반환한다.

 

기본 형식

CASE
	WHEN 조건1 THEN 반환값1
	WHEN 조건2 THEN 반환값2
	...
	ELSE 반환값
END

 

예시

SELECT STUDENT_CODE,
       CASE
           WHEN SCORE >= 90 THEN 'A'
           WHEN SCORE >= 80 THEN 'B'
           WHEN SCORE >= 70 THEN 'C'
           ELSE 'F'
       END AS RESULT
FROM EXAM;

SCORE = 95 라면 A를 출력한다.


프로그래머스 문제풀이에서 CASE 문을 사용하는 문제를 풀어봤다.

문제

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

 

예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A355753 Dog 2015-09-10 13:14:00 Normal Elijah Neutered Male
A373219 Cat 2014-07-29 11:43:00 Normal Ella Spayed Female
A382192 Dog 2015-03-13 13:14:00 Normal Maxwell 2 Intact Male

중성화한 동물: Elijah, Ella / 중성화하지 않은 동물: Maxwell 2

 

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

ANIMAL_ID NAME 중성화
A355753 Elijah O
A373219 Ella O
A382192 Maxwell 2 X

※ 컬럼 이름은 일치하지 않아도 됩니다.

 

풀이

SELECT ANIMAL_ID , NAME,
CASE
    WHEN SEX_UPON_INTAKE LIKE 'Neutered%'
    OR SEX_UPON_INTAKE LIKE 'Spayed%'
    THEN 'O' -- WHEN에 만족하는 데이터
    ELSE 'X' -- 그 외 데이터
END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID