mysql 문제풀이/easy

프로그래머스 Lv 4 - 보호소에서 중성화한 동물 (Lv 4 문제 마지막)

gooreumsea 2023. 8. 16. 14:22

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

 

습득한 점:

WHERE ~ IN () 처럼, LIKE IN () 도 가능할까 싶었는데, 불가능했다.

대신 아래처럼 AND를 전체로 묶은 뒤, 안쪽을 OR로 엮어줄 수는 있었다.

 

...

WHERE SEX_UPON_INTAKE LIKE 'Intact%'
AND (SEX_UPON_OUTCOME LIKE 'Spayed%' OR SEX_UPON_OUTCOME LIKE 'Neutered%')

...

 

 

 

문제:

보호소에 들어올 당시에는 중성화1되지 않았지만,

보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 쿼리 작성.

 

즉, 들어올 땐, 중성화X, 나갈땐 중성화O 에 해당하는 데이터를 찾으면 된다.

 

 

 

문제파악:

처음 문제 딱 보고, 보호소에서 나가는 동물 중에 중성화 안된 동물이 있는지 궁금해서 찾아보니 있었다.

 

## 보호소에서 나가는 동물 중, 중성화 안된 동물 2마리 확인

 

SELECT *
FROM ANIMAL_OUTS
WHERE SEX_UPON_OUTCOME LIKE 'Intact%'

 

결국은 들어올 때의 SEX_UPON_INTAKE 컬럼은 "Intacts%" 이고,

동시조건으로 나갈 때의 SEX_UPON_OUTCOME 컬럼은 "Sprayed% 혹은 "Neutral%" 인 데이터를 찾으면 된다.

 

 

ANIMAL_ID 기준으로 테이블 2개 조인 후, WHERE 조건에 위의 2개 항목 엮어준 뒤 ORDER BY 까지 작성해주면 된다.

 

 

 

풀이:

 

보호소에서 나가는 동물 중, 중성화 안된 동물 2마리 확인

SELECT *
FROM ANIMAL_OUTS
WHERE SEX_UPON_OUTCOME LIKE 'Intact%'





찾는 데이터: 들어올 땐, 중성화X, 나갈땐 중성화 O

SELECT INS.ANIMAL_ID
     , INS.ANIMAL_TYPE
     , INS.NAME
#     , SEX_UPON_INTAKE
#     , SEX_UPON_OUTCOME
FROM ANIMAL_INS AS INS
     INNER JOIN ANIMAL_OUTS AS OUTS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID


WHERE SEX_UPON_INTAKE LIKE 'Intact%'
AND (SEX_UPON_OUTCOME LIKE 'Spayed%' OR SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY ANIMAL_ID


혹은 AND SEX_UPON_OUTCOME NOT LIKE 'Intact%'도 가능할 것 같다.