[SQL] 59045 보호소에서 중성화한 동물
https://school.programmers.co.kr/learn/courses/30/lessons/59045
1. 문제
테이블
- ANIMAL_INS : 동물이 보호소에 들어올 때 정보 (ANIMAL_ID, ANIMAL_TYPE, SEX_UPON_INTAKE 등)
- ANIMAL_OUTS: 동물이 보호소에서 나갈 때 정보(ANIMAL_ID, ANIMAL_TYPE, SEX_UPON_OUTCOME| 등)
- 두 테이블은 ANIMAL_ID 로 연결됨
조건
- 보호소에 들어올 때(SEX_UPON_INTAKE) Intact (중성화 안 됨)
- 보호소에서 나갈 때(SEX_UPON_OUTCOME) Spayed 또는 Neutered (중성화 됨)
출력
- ANIMAL_ID, ANIMAL_TYPE, NAME
2. 정답쿼리
-- 코드를 입력하세요
-- 들어때는 중성화 X
-- 나갈때는 중성화 O
-- ANIMAL_INS에서는 SEX_UPON_INTAKE 컬럼 에서 Intact 들어간 애들만 CTE
-- CTE를 ANIMAL_ID 기준으로 ANIMAL_OUTS 랑 조회해서
-- SEX_SEX_UPON_INTAKE가 Intact 가 아닌 애들 조회
WITH INTACTS AS (
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE SEX_UPON_INTAKE LIKE 'Intact%'
)
SELECT o.ANIMAL_ID, o.ANIMAL_TYPE, o.NAME
FROM ANIMAL_OUTS o JOIN INTACTS i ON o.ANIMAL_ID = i.ANIMAL_ID
WHERE SEX_UPON_OUTCOME LIKE 'Spayed%'
OR SEX_UPON_OUTCOME LIKE 'Neutered%'
- Intact - 중성화 안됨
- Neutered, Spayed는 중성화됨
★ 핵심 포인트
- ANIMAL_INS 테이블에서 SEX_UPON_INTAKE 컬럼이 INTACT로 시작하는 동물들의 ID만 조회하기 → CTE
- 이 때 WHERE쩔에 LIKE 'Intact%'를 쓴다
- 처음에 LIKE 대신 = 연산자 써서 오답처리 됨
- 메인 쿼리
- CTE와 ANIAML_OUTS 테이블을 ANIMAL_ID 컬럼 기준으로 JOIN 하기
- LIKE 'Spayed%' OR LIKE 'Neutered%' 로 입양보내졌을 때 중성화가 된 동물 조회하기
- 조회할 컬럼: ANIMAL_ID, ANIMAL_TYPE, NAME
- 정렬은 따로 문제에 명시되지 않아서 WHERE 절까지만 쿼리 씀