문제
풀이
(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
🔸 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 타입끼리는 기본적인 연산이 가능하므로 이런 식의 풀이도 가능하다.
'📊 Algorithm&SQL' 카테고리의 다른 글
[MySQL/프로그래머스] 가격대 별 상품 개수 구하기 (0) | 2023.04.24 |
---|---|
[MySQL/프로그래머스] 조건별로 분류하여 주문상태 출력하기 (0) | 2023.04.23 |
[Java/프로그래머스] K번째 수 (0) | 2022.12.11 |
[Java/프로그래머스] 예산 (2) | 2022.11.27 |
[Java/프로그래머스] 약수의 합 (0) | 2022.11.26 |