해당 글은 Programmers 코딩테스트 연습을 토대로 MYSQL 로 작성되었습니다.
Q 문제: 오랜 기간 보호한 동물(2)
A 문제풀이:
-- 코드를 입력하세요
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NOT NULL
ORDER BY DATEDIFF(O.DATETIME,I.DATETIME) DESC LIMIT 2 ;
|
|
해당문제는 입양 간 동물 중, 보호 기간이 가장 길었던 동물 두마리를 찾는 것이다.
즉, 입양 간 동물이므로 동물 보호소에서 입양 보낸 동물이어야 되고 동시에
보호기간 ( 보호소 들어온 날 - 보호소에서 나간 날)이 가장 긴 동물 두 마리를 찾으면 된다.
E 자세한 설명
먼저, 입양 간 동물들은 ANIMAL_OUTS 에 이름이 있으면 된다.
즉, ANIMAL_OUTS(입양 보낸 동물 테이블)에 이름이 꼭 있어야 하므로
조건문(WHERE) 에 ANIMAL_ID에 NULL값이 아니어라 라는 조건을 준다.
그리고 보호기간이 가장 긴 날을 찾아야 하므로
보호소에 들어온 날과 보호소에 나간 날의 차이를 출력해주는 DATEDIFF를 사용한다.
DATEDIFF사용법
-- 날짜1 - 날짜2
DATEDIFF(날짜1,날짜2)
정렬에 따라 원하는 결과 값을 얻을 순 있지만 일반적으로
끝나는 날짜 - 시작한 날짜 를 해야 양의 값을 얻고 내림차순으로 정렬을 하면
기간이 큰 날짜부터 순서대로 출력할 수 있다.
(설명을 직접 쓴 나도 난독증이...) 헷갈리니 밑에 사진을 참고해보자.
날짜차이1 : DATEDIFF(보호소 나간 날짜 , 보호소 들어온 날짜)
날짜차이2 : DATEDIFF(보호소 들어온 날짜 , 보호소 나간 날짜)
※ 참고로 위 결과값은 ORDERBY 날짜차이1 DESC 내림차순을 했다. (정렬 기본값은 ASC 오름차순 이다.)