Hodustory/프로그래밍&DB

[SQL] 프로그래머스 : 보호소에서 중성화한 동물(EXISTS, LIKE)

호두밥 2021. 7. 25. 15:47

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/59045

 

코딩테스트 연습 - 보호소에서 중성화한 동물

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

programmers.co.kr

2. 풀이

  • OUT의 중성화 된 목록 : LIKE
    • SEX_UPON_OUTCOME이 Neutered나 Spayed로 시작
  • IN의 중성화 안 된 목록 : LIKE
    • SEX_UPON_INTAKE가 Intact로 시작
  • OUT의 중성화 된 목록에 있으면서 IN의 중성화 된 목록에도 있는 경우 : EXISTS 또는 INNER JOIN 

3. 답안

--EXISTS 사용
SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
FROM ANIMAL_OUTS O
WHERE ( SEX_UPON_OUTCOME LIKE 'Neutered%' OR SEX_UPON_OUTCOME LIKE 'Spayed%' )
AND EXISTS (SELECT 1 FROM ANIMAL_INS I WHERE O.ANIMAL_ID = I.ANIMAL_ID AND I.SEX_UPON_INTAKE LIKE 'Intact%'  )
ORDER BY ANIMAL_ID
;
--INNER JOIN 사용
SELECT OUTS.ANIMAL_ID, OUTS.ANIMAL_TYPE, OUTS.NAME 
FROM
    (SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
        FROM ANIMAL_OUTS
        WHERE ( SEX_UPON_OUTCOME LIKE 'Neutered%' OR SEX_UPON_OUTCOME LIKE 'Spayed%' )
    ) OUTS
INNER JOIN
    (SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
        FROM ANIMAL_INS 
        WHERE SEX_UPON_INTAKE LIKE 'Intact%'  
    ) INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
ORDER BY OUTS.ANIMAL_ID
;
반응형