https://school.programmers.co.kr/learn/courses/30/lessons/59409

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드설명

CASE WHEN + LIKE 를 활용합니다.

 

주어진 문제를 보면 Neutered 는 형용사로써 항상 앞에 붙는것을 알 수 있습니다.

그러므로 Neutered% 로 뒤에 값들을 검색하도록 합니다.

코드

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, 
CASE 
    WHEN SEX_UPON_INTAKE LIKE ("Neutered%") OR SEX_UPON_INTAKE LIKE ("Spayed%") THEN 'O'
    ELSE 'X'
END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

 

SELECT ANIMAL_ID, NAME,
    CASE
        WHEN SEX_UPON_INTAKE IN ('Neutered Male', 'SPAYED FEMALE') THEN 'O'
        ELSE 'X'
    END AS '중성화'
FROM ANIMAL_INS

 

ORACLE

SELECT AI.ANIMAL_ID, AI.NAME, 
    CASE WHEN
        AI.SEX_UPON_INTAKE LIKE '%Neutered%' OR AI.SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
        ELSE 'X'
    END AS "중성화"
FROM ANIMAL_INS AI
ORDER BY AI.ANIMAL_ID

 

아래와 같이 REGEXP_LIKE를 사용한다면 더 짧게 코딩할 수 있습니다.

이 문제의 경우 항상 Neutered, Spayed 로 시작하므로 '^(Neutered|Spayed)'  로 가능합니다. 이렇게 시작값을 기준으로 한다면 당연히 성능은 더 개선될 겁니다.

SELECT AI.ANIMAL_ID, AI.NAME, 
    CASE WHEN
        REGEXP_LIKE(AI.SEX_UPON_INTAKE, '(Neutered|Spayed)') THEN 'O'
        ELSE 'X'
    END AS "중성화"
FROM ANIMAL_INS AI
ORDER BY AI.ANIMAL_ID

 

+ Recent posts