본문 바로가기

Algorithm/SQL

(MYSQL) - 프로그래머스 (SQL 고득점 kit - JOIN) : 보호소에서 중성화한 동물

반응형

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

LEFT OUTER JOIN과 LIKE를 사용해보는 문제였습니다.

 

풀이방법

 1. 테이블 정의 : ANIMAL_INS를 A로 ANIMAL_OUTS를 B로 정의합니다.

 2. JOIN 연산 : A를 왼쪽, B를 오른쪽으로하고 ANIMAL_ID가 같은 것끼리 매칭한 뒤 TABLE을 조회합니다. 

 3. 조건 설정 : 보호소에 들어왔을 때 상태가 Intact고 (입양되었을 때 상태가 Spayed 또는 Neutered) 인 경우입니다.

* 만약 소괄호 '()'를 해주지 않는다면 가장 왼쪽부터 조건을 보므로 (보호소에 들어왔을 때 상태가 Intact고 입양되었을 때 상태가 Spayed) 또는 Neutered라고 해석하게 되어 틀린 답을 도출하게 됩니다. 

*LIKE IN은 함께 쓰지 못합니다. 따라서 합치지 못하여 OR로 나누게 되었습니다. 합칠 수 있는 코드가 있다면 설명 부탁드리겠습니다 ㅜㅜ

 4. 정렬 : ANIMAL_ID를 오름차순으로 정렬해줍니다.

Code

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME FROM ANIMAL_INS A
LEFT OUTER JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE LIKE 'Intact%' AND (B.SEX_UPON_OUTCOME LIKE 'Spayed%' OR B.SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY A.ANIMAL_ID