[문제]
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.
- ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블
- ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블
[풀이]
SELECT AO.ANIMAL_ID, AO.NAME
FROM ANIMAL_OUTS AO
INNER JOIN ANIMAL_INS AI
ON AO.ANIMAL_ID = AI.ANIMAL_ID
ORDER BY DATEDIFF(AO.DATETIME, AI.DATETIME) DESC
LIMIT 2
;
[코드리뷰]
- 입양을 간 동물 중
- 입양 보낸 동물의 정보를 담은 테이블인 ANIMAL_OUTS를 기준
- 보호 기간이 가장 길었던 동물
- 보호 기간이 가장 길었던 동물을 알기 위해서는 보호를 시작한 날을 알아야 하기 때문에 ANIMAL_ID를 기준으로 ANIMAL_INS 테이블과 JOIN
-> INNER JOIN ANIMAL_INS AI ON AO.ANIMAL_ID = AI.ANIMAL_ID
- 보호기간이 길었던 동물 2마리
- 입양일 - 보호시작일 -> 보호기간을 알 수 있음
- 입양일과 보호시작일 데이터 타입은 DATE이기 때문에 DATEDIFF함수를 통해 날짜 연산을 함
-> DATEDIFF(AO.DATETIME, AI.DATETIME)
- 반드시 순서를 지킬것.
- 가장 길었던 2마리이기 때문에 DESC로 정렬
- LIMIT 2로 제한