30대 갓생살기😍

반응형
 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

해당 글은 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 오름차순 이다.)

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading