오늘의 소감
할 일이 많다고 생각하니 집중이 잘 되지 않았다.
다른 사람들보다 늦다고 생각하니 계속해서 마음이 조급해졌고,
빨리 따라가야 한다는 생각에 꼭꼭 씹어서 삼키지 못하고 있다는 생각이 들어서 그런 거 같다.
지금은 개념을 잡는 시기이니 너무 조급해 하지 말고 따라가자.
내일부턴 다시 천천히...할 수 있다!
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
'스파르타 코딩클럽 > 매일회고록' 카테고리의 다른 글
Today I Leared. Day 9 - [아티클 스터디] 데이터 속 거짓말 발견하기 (0) | 2024.07.12 |
---|---|
Today I Learned. Day 8 - 파이썬 입문 (0) | 2024.07.10 |
Today I Learned. Day 6 - 데이터 리터러시 (0) | 2024.07.09 |
Today I Learned. Day 5 (0) | 2024.07.05 |
Today I Learned. Day 4 (0) | 2024.07.04 |