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
;
반응형