본문 바로가기
데이터베이스/MYSQL

[MYSQL] 오랜 기간 보호한 동물(2)

by 썬키 2023. 1. 8.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

링크를 클릭하면 해당 문제로 이동합니다.

 

출처 - 프로그래머스

 

1. 접근하기

문제에서 필요한 데이터는 보호 기간인데 보호 기간은 입양일과 보호시작일 간의 차이를 구해주면 되겠다고 생각했다.

보호 기간을 기준으로 내림차순 정렬하고 LIMIT 2 를 사용하면 되겠다.

MYSQL에서 두 날짜간의 차이를 구하려면 DATEDIFF(날짜1, 날짜2)를 사용하면 된다.

 

2. 풀이

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC LIMIT 2;

보호 시작일과 입양일 데이터가 필요하므로, 두 테이블간 Inner Join을 해주었다.

DATEDIFF 함수는 처음 사용해보는데 기억해두면 앞으로 쓸 일이 많을 거 같다.

 

# 번외 - TIMESTAMPDIFF()

DATEDIFF 함수는 두 날짜간의 차이를 일(Day)수로 반환해주는데

년, 분기, 월, 주, 일, 시, 분, 초로 반환하고 싶을 때는 TIMESTAMPDIFF 함수를 이용하면 된다.

사용법은 TIMESTAMPDIFF(지정 반환 타입, '날짜1', '날짜2') 이다.

 

ㆍ 지정 반환 타입

 년 - YEAR

 분기 - QUARTER

 월 - MONTH

 주 - WEEK

 일 - DAY

 시 - HOUR

 분 - MINUTE

 초 - SECOND

 

 

- 두 날짜간의 차이를 년(Year)으로 반환

SELECT TIMESTAMPDIFF(YEAR, '2022-01-08', '2023-01-08')
Result : 1

- 두 날짜간의 차이를 분기(Quarter)로 변환

SELECT TIMESTAMPDIFF(QUARTER, '2022-01-08', '2023-01-08')
Result : 1

- 두 날짜간의 차이를 월(Month)로 변환

SELECT TIMESTAMPDIFF(MONTH, '2022-01-08', '2023-01-08')
Result : 12

- 두 날짜간의 차이를 주(Week)로 변환

SELECT TIMESTAMPDIFF(WEEK, '2022-01-08', '2023-01-08')
Result : 52

 

댓글