[MySQL] CASE WHEN THEN 구문 알아보기
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