스파르타 코딩클럽/매일회고록

Today I Learned. Day 7 - MySQL 기간 산출 코드

뜌비뜌바밥 2024. 7. 9. 20:29
오늘의 소감

 

할 일이 많다고 생각하니 집중이 잘 되지 않았다.

다른 사람들보다 늦다고 생각하니 계속해서 마음이 조급해졌고,

빨리 따라가야 한다는 생각에 꼭꼭 씹어서 삼키지 못하고 있다는 생각이 들어서 그런 거 같다. 

 

지금은 개념을 잡는 시기이니 너무 조급해 하지 말고 따라가자.

내일부턴 다시 천천히...할 수 있다!


Today I Learned
MySQL 기간 산출 코드

 

1. TIMESTAMPDIFF 함수 

#연
SELECT TIMESTAMPDIFF(YEAR, 시작하는 날짜 변수 이름, 끝나는 날짜 변수 이름)
#개월
SELECT TIMESTAMPDIFF(MONTH, 시작하는 날짜 변수 이름, 끝나는 날짜 변수 이름)
#일자
SELECT TIMESTAMPDIFF(DAY, 시작하는 날짜 변수 이름, 끝나는 날짜 변수 이름)
#시간
SELECT TIMESTAMPDIFF(HOUR, 시작하는 날짜 변수 이름, 끝나는 날짜 변수 이름)

 

 

 

MySQL에서는 시작일자와 종료일자가 있다면 기간을 산출 할 수 있는데 이때 TIMESTAMPDIFF 함수를 사용한다. TIMESTAMPDIFF 함수는 [종료일자-시작일자]를 계산하여 원하는 기준(시간, 일자, 개월, 년 차이)에 따른 기간 차이를 산출해준다. 

 

위 코드에서 볼 수 있듯이 본인이 원하는 기준을 연 - year, 개월 - month, 일자- day, 시간-hour으로 기재하면 된다. 이외에도 분(minute), 초(second) 등도 가능하다. 


2. 적용

 

1) 코드 카타 문제

입양을 간 동물 중, 보호 기간이 가장 길었던 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다. 

 

2) 코드 작성 시, 필요한 정보

  • 입양을 간 동물 중 → inner join 필요
  • 보호 기간이 가장 길었던 동물 →  timestampdiff 함수 이용
  • 두마리  → limit 함수 이용
  • 아이디와 이름 조회 → 서브 쿼리 이용, 본 쿼리 select에 변수 기재
  • 보호 기간이 긴 순으로 조회 →  order by 절에 기재

3) 코드 작성

SELECT animal_id, name
FROM
(
select ai.animal_id, ai.name, TIMESTAMPDIFF(DAY, ai.datetime, ao.datetime) "day"
from animal_ins ai inner join animal_outs ao on ai.animal_id=ao.animal_id
) A
ORDER BY day DESC
LIMIT 2
  • SELECT에는 아이디와 이름 
  • FROM 밑에는 서브 쿼리 연결
  • 서브 쿼리의 SELECT에는 본 쿼리에서 사용할 아이디, 이름, 보호기간 일수 산출
  • 서브 쿼리의 FROM에는 두 테이블을 inner join : animal_id가 동일함
  • ORDER BY에서 보호기간 일수, 내림차순으로
  • LIMIT 에는 두 마리만 산출해야 함으로 2