본문 바로가기

데이터베이스

CASE ~ WHEN ~ THEN ~ ELSE ~ END

#SQL 문을 연습하자 #Programmers


 

코딩테스트 연습 - 중성화 여부 파악하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

ORACLE & MYSQL

SELECT 
    ANIMAL_ID, 
    NAME,
    (CASE 
        WHEN (SEX_UPON_INTAKE LIKE '%Neutered%' ) THEN 'O'
        WHEN (SEX_UPON_INTAKE LIKE '%Spayed%') THEN 'O'
    ELSE 'X' END) "중성화" 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

*고난과 극복
- 값은 '' 싱글 쿼트,  alias는 "" 더블 쿼트
- 조건이 표현 식일 때는 CASE 바로 다음에 칼럼 이름을 쓰지 않기

어떤 칼럼이 무슨 값인지에 따라 다른 값으로 나오게 만들기 위해서 CASE 문을 사용했다. 
LIKE 문과 IN 은 함께 쓸 수 없다. 
Neutered 이거나 Spayed 이거나 일 때 각각의 조건으로 나눠줘야 한다.

CASE 문에는 조건마다 결과를 구분할 수 있는 데,
조건의 수는 1 개여도 되고, 여러 개 여도 되며,
ELSE로 디폴트 값을 지정해주지 않아도 된다.

-- 조건 하나 & 디폴트 값 없음
SELECT 
    ANIMAL_ID, 
    NAME,
    (CASE 
        WHEN (SEX_UPON_INTAKE LIKE '%Neutered%' ) THEN 'O'
         END) "중성화" 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

-- 조건 하나 & 디폴트 값 있음
SELECT 
    ANIMAL_ID, 
    NAME,
    (CASE 
        WHEN (SEX_UPON_INTAKE LIKE '%Neutered%' ) THEN 'O'
     ELSE 'X' END) "중성화" 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

끝!