📊 Algorithm&SQL

[MySQL/프로그래머스] 오랜 기간 보호한 동물(2)

오늘 ONEUL 2023. 4. 21. 22:52

문제

 

 

 

풀이

(1) 문제 분석하기

  • 보호 시작일은 ANIMAL_INS 테이블에, 입양일은 ANIMAL_OUTS 테이블 ⇒ 두 테이블을 JOIN
  • 보호 기간이 긴 순으로 정렬 ⇒ ORDER BY 보호 기간(입양일 - 보호 시작일) DESC
  • 결과는 동물 2마리만 ⇒ LIMIT 2

 

(2) 쿼리 구현하기

🔸 DATEDIFF 함수를 이용한 풀이

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I
INNER JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC
-- DATEDIFF 사용
LIMIT 2

가장 먼저 떠올린 건 특정 날짜의 차이를 연산해 주는 DATEDIFF 함수였다.
ORDER BY절에서 보호 시작일로부터 입양일의 차이를 구해 내림차순으로 정렬하였다.

 

특정 날짜나 시간의 차이 연산

  • PERIOD_DIFF(period1, period2) - 두 기간의 차이를 숫자로 반환(period의 형식은 YYMM 또는 YYYYMM만 가능, period1과 period2는 같은 형식이어야 함)
  • DATEDIFF(date1, date2) - 두 날짜 사이의 일수를 숫자로 반환(date1 - date2)
  • TIMEDIFF(time1, time2) - 두 시간의 차이를 datetime 형태로 반환(time1 - time2)
SELECT PERIOD_DIFF(202206, 202201);
-- 5

SELECT DATEDIFF(CURDATE(), '2021-06-11');
-- 365

SELECT TIMEDIFF('2022-06-21 12:34:56', '2022-06-11 12:34:56');
-- 240:00:00
 

[MySQL] MySQL 날짜 관련 함수 총정리

Date Functions 날짜 관련 함수 날짜와 시간의 형식화 DATE_FORMAT(date, format) - 주어진 date를 format에 맞춰 문자열로 반환 SELECT DATE_FORMAT(hiredate, '%Y-%m-%d') FROM emp; -- YYYY-mm-dd SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %T'

oneul-losnue.tistory.com

 

 

🔸 DATETIME 타입의 연산을 이용한 풀이

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I
INNER JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
-- DATETIME의 기본적인 연산
LIMIT 2

첫 번째 풀이와 달라진 건 ORDER BY절뿐이다.
DATE나 DATETIME 타입끼리는 기본적인 연산이 가능하므로 이런 식의 풀이도 가능하다.

 

 

 

 

프로그래머스

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

programmers.co.kr