728x90
반응형
SQL로 중성화된 동물 찾기 🐾
https://school.programmers.co.kr/learn/courses/30/lessons/59045
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
오늘은 동물 보호소 데이터를 다루는 SQL 문제를 풀어봤어요!
바로 입소 당시엔 중성화되지 않았지만, 퇴소할 땐 중성화된 동물을 찾아보는 문제였죠.
문제를 제대로 이해하려면 '중성화 여부'의 텍스트를 잘 구분해야 해요!
문제 요약 ✍️
두 개의 테이블 ANIMAL_INS
와 ANIMAL_OUTS
가 있어요.
- ANIMAL_INS: 동물이 보호소에 들어올 때의 정보
- ANIMAL_OUTS: 동물이 보호소를 나갈 때의 정보
우리는 아래 조건을 만족하는 동물을 찾아야 해요.
- 입소 당시에는 'Intact' (중성화 X)
- 퇴소 당시에는 'Neutered' 또는 'Spayed' (중성화 완료)
내가 작성한 SQL 코드 💻
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE LIKE '%Intact%'
AND (O.SEX_UPON_OUTCOME REGEXP 'Neutered' OR O.SEX_UPON_OUTCOME REGEXP 'Spayed')
ORDER BY I.ANIMAL_ID;
코드 설명 🙋🏻♀️
이제 코드를 한 줄씩 찬찬히 뜯어볼게요!
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
👉 최종적으로 보여줄 컬럼 3개를 선택했어요.
동물의 ID, 종류(개/고양이 등), 이름만 출력!FROM ANIMAL_INS I
👉 입소 테이블ANIMAL_INS
를 기준으로 조회를 시작해요.JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
👉 입소 기록과 퇴소 기록을ANIMAL_ID
로 연결!
같은 동물의 입소와 퇴소 정보를 합쳐서 봐야 하니까요.WHERE I.SEX_UPON_INTAKE LIKE '%Intact%'
👉 입소 당시 성별+중성화 상태 중에서, 중성화되지 않은 동물만 걸러줘요.
(예:Intact Male
,Intact Female
)AND (O.SEX_UPON_OUTCOME REGEXP 'Neutered' OR O.SEX_UPON_OUTCOME REGEXP 'Spayed')
👉 반대로 퇴소할 땐 중성화된 상태인 경우만 필터링!
정규표현식REGEXP
을 이용해서 'Neutered'나 'Spayed'가 들어간 값을 골라요.ORDER BY I.ANIMAL_ID
👉 결과는 동물 ID 기준으로 정렬해서 보기 좋게 출력되도록 했습니다.
정리하며 ✨
이 문제는 단순히 JOIN만 하는 게 아니라, 문자열 안에서 조건을 판별해야 하는 게 포인트였어요.
특히 중성화 상태가 문자열로 되어 있어서, LIKE와 REGEXP 같은 텍스트 조건이 아주 중요했죠!
비슷한 문제를 만나면, 데이터의 의미를 제대로 파악하고 조건을 정확히 걸어주는 연습을 계속해야겠다고 느꼈어요.
그리고 무엇보다도, SQL에서 JOIN은 이제 정말 필수 스킬이니 계속 연습해보자구요 🔥
💡 재미있게 읽어주셔서 감사합니다! 다음 문제 풀이에서 또 만나요 🐾
728x90
반응형
'MYSQL' 카테고리의 다른 글
[프로그래머스 LV.04] MYSQL 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2025.05.19 |
---|---|
[프로그래머스 LV.04] MYSQL 저자 별 카테고리 별 매출액 집계 (1) | 2025.05.19 |
[프로그래머스 LV.04] MYSQL 취소되지 않은 흉부외과 진료 예약 조회하기 (0) | 2025.05.19 |
[프로그래머스 LV.04] MYSQL 5월 식품들의 총매출 조회하기 (0) | 2025.05.19 |
[프로그래머스 LV.04] MYSQL 식품분류별 가장 비싼 정보 조회하기 🍪🍲 (0) | 2025.05.19 |
댓글