데이터 분석

보호소에서 중성화한 동물 | Lv.4 본문

SQL/프로그래머스

보호소에서 중성화한 동물 | Lv.4

딱한아이 2025. 4. 24. 16:48
문제
보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

 

참고 ) 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시

  sex_upon_intake/sex_upon_outcome
중성화를 거치지 않은 경우 Intact
중성화 된 경우 Spayed 또는 Neutered

 

 

풀이 
# (1)
SELECT animal_id
     , animal_type
     , name
FROM animal_outs
WHERE animal_id IN (
    SELECT animal_id
    FROM animal_ins
    WHERE sex_upon_intake REGEXP 'Intact'
)
  AND sex_upon_outcome REGEXP 'Spayed|Neutered'
ORDER BY animal_id

# (2)
SELECT o.animal_id
     , o.animal_type
     , o.name
FROM animal_outs o
    JOIN animal_ins i ON o.animal_id = i.animal_id
                     AND i.sex_upon_intake REGEXP 'Intact'
                     AND o.sex_upon_outcome REGEXP 'Spayed|Neutered'
ORDER BY o.animal_id

 

1번 쿼리 : WHERE 절 다중행 서브쿼리
- animal_outs 테이블(보호소에서 입양 보낸 동물의 정보)에서 보호소에 들어올 당시 중성화 되지 않은 animal_id 에 해당하는 동물이 필터링될 수 있도록 서브쿼리 작성

-
WHERE 절에 Spayed 또는 Neutered에 해당하는 조건을 정규 표현식 REGEXP 활용해 추가

 

 

 2번 쿼리 : JOIN 

- 두 테이블을 animal_id를 기준으로 조인함과 동시에 ON 절에 중성화 관련 조건을 추가하여, 조인 전에 먼저 필터링하여 불필요한 데이터를 줄인 것이 특징