2026. 5. 19. 12:07ㆍ프로그래머스 SQL
문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
문제 파악
1. 동물의 입양 전 정보(ANIMAL_INS)와 입양 후 정보(ANIMAL_OUTS) 를 ANIMAL_ID 기준으로 테이블 결합(JOIN)
2. 들어온 날짜가 나간 날짜 보다 더 큰 경우를 찾는다 =필터링
3. 보호 시작일 기준으로 오름차순 정렬
해결 과정
1. SELECT AI.ANIMAL_ID, AI.NAME
= 최종 결과물로 보여줄 아이디와 이름 선택하고 입양 테이블과 보호 테이블 모두에 존재하는 컬럼이므로, 정확하게 보호 테이블(AI)에서 가져오도록 지정
2. FROM ANIMAL_INS AI JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID
= 동물의 보호 시작일과 입양일은 각각 다른 테이블에 저장되어 있기 때문에 두개를 한눈에 비교하기 위해서 고유번호를 매핑 조건(ON) 으로 삼아 테이블을 가로로 이어붙이기
3. WHERE AI.DATETIME > AO.DATETIME
= 보호 시작일이 입양일 보다 미래로 잘못 입력된 데이터만 거르는 필터링 조건
4. 보호 시작일이 빠른 순서부터 오름차순 정렬
답변
SELECT AI.ANIMAL_ID, AI.NAME
FROM ANIMAL_INS AI
JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AI.DATETIME > AO.DATETIME
ORDER BY AI.DATETIME ASC;
데이터 분석을 시작하기 전에 데이터의 무결성 검증 로직을 먼저 수행해야 정확한 분석 결과를 도출 할 수 있겠다는 점을 배울 수 있는 문제였다.
'프로그래머스 SQL' 카테고리의 다른 글
| 13.프로그래머스 SQL Lv.3 (부서별 평균 연봉 조회하기) (0) | 2026.05.19 |
|---|---|
| 12.프로그래머스 SQL Lv.3 (즐겨찾기가 가장 많은 식당 정보 출력하기) (0) | 2026.05.19 |
| 10.프로그래머스 SQL Lv.3 (업그레이드 할 수 없는 아이템 구하기) (0) | 2026.05.19 |
| 9.프로그래머스 SQL lv.3 (조건별로 분류하여 주문상태 출력하기) (0) | 2026.05.19 |
| 8. 프로그래머스 SQL lv.3(조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기) (0) | 2026.05.19 |