알고리즘(algo)/SQL

[SQL] 자동차 대여 기록에서 장기/단기 대여 구분하기

dDong2 2023. 2. 17. 11:52
참고: https://school.programmers.co.kr/learn/courses/30/lessons/151138

 

✔️ 문제

 

 

문제는 다음과 같다.

 

 

✔️ 풀이

 

 

다음처럼 START_DATE와 END_DATE는 년-월-일만 출력해야하고,

END - START의 날짜 뺀 값이 30일 이상이면 장기 대여, 아니면 단기 대여라는

RENT_TYPE의 새로운 컬럼에 데이터를 추가해야한다.

또한, 대여 시작일이 9월인 경우에만 출력하고, ID 순으로 내림차순 정렬해야한다.

 

SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') as START_DATE, DATE_FORMAT(END_DATE, '%Y-%m-%d') as END_DATE, IF(DATEDIFF(END_DATE, START_DATE) >= 29, "장기 대여", "단기 대여") as RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC

 

다음과 같이 START_DATE가 2022-09월에 포함되는 경우에

DATE_FORMAT을 활용해 날짜 포맷을 맞춰주었다.

 

또한, IF 조건문과 DATEDIFF를 활용했는데 DATEDIFF(끝, 시작)에 해당하는

함수를 사용해서 차이를 구해주고 29이상인 경우에 장기 대여, 아니면 단기대여라는

새로운 컬럼을 부여하였다. 여기서 30이 아닌 29인 이유는 날짜 - 날짜는 29 이상이

한달에 해당하기 때문이다. 30으로 작성하면 틀린 답으로 나온다.

 

화이팅 💪