자동차 대여 기록에서 장기/단기 대여 구분하기 문제는 다음과 같다.



이번 문제를 풀기 위해선
1. HISTORY_ID, CAR_ID, START_DATE, END_DATE출력
2. START_DATE와 END_DATE를 'YYYY-MM-DD' 형태로 출력
3. 9월의 대여기록만 출력
4. 대여 기간이 30일 이상이면 장기 대여로 출력
5. 대여 기록 ID 기준 내림차순 정렬
순으로 접근해야 한다.
우선은 HISTORY_ID, CAR_ID, START_DATE, END_DATE를
출력시켜주겠다.
(RENT_TYPE은 순서 4번을 풀 때 추가시켜주겠다.)

이 다음으로 START_DATE와 END_DATE 컬럼이
'YYYY-MM-DD'의 형태로 출력되도록 해주겠다.
여느때와 마찬가지로 DATE_FORMAT( )를 사용해주겠다.

이제 이 다음으로 9월달의 대여기록만
출력되도록 조건을 걸어주겠다.

이제 대여 기간이 30일이 넘어가면 '장기 대여'로
30일 이하이면 '단기 대여'로 출력되게끔 해주겠다.
CASE문을 통해 풀어보려고 한다.
우선 이 30일을 어떤 방식으로 세주어야 하나에 대해
생각을 해보았다.
나는 보통 날짜 일수를 셀 때 마지막 일을 기준으로
시작일까지 하루씩 더해가며 세어 주는데
이를 수식화 시키면 종료일 - 시작일 + 하루로 표현할 수 있을 것 같다.
(보통 종료일을 D-D로 표시하니 하루가 추가되어야 한다.
물론 내 기준에서 그렇게 센다는 거다.)
그래서 일단은 종료일 - 시작일 + 하루 <- 이 수식을 가지고
CASE문을 짜보았다.

수식을 구현시키고 나니 문득 든 생각....
나는 인간이라서 다음달 날짜가 전 달 날짜보다 작디 크디 신경쓰지 않지만...
컴퓨터는 인식하지 못하잖아...?
그럼... 다음달 날짜보다 전 달 날짜가 크면 어떻게 되는거지....?
예를 들면 10월 16일이 종료일이고 9월 31일이 시작이면.....
그래서 일단 에라 모르겠다.
냅다 실행시켜봤다.

ㅎ...... 역시나 안된다....
그래서 날짜 일수 차를 구해주는 함수를 마구 서치해보았다.
그리고 발견해낸 DATEDIFF( )...!
바로 적용시켜줘 보았다.

그리고 실행시켜봤다.

된다...! 된다아아아....!!!!!
그럼 일단 장기 대여인지 단기 대여인지
제대로 판단 후 출력할 수 있단 가정 하에
마지막으로 대여 기록 ID 기준 내림차순 정렬을 해주겠다.

정답인지 확인해보면

정답으로 인정된다!!!!!!!!!!
(너무 기쁘다 이렇게 기뻐도 되는지 모르겠다 너무 기쁘다 어흑흑)
'DB > 문제풀이' 카테고리의 다른 글
| [프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 -LV.3 (0) | 2023.02.02 |
|---|---|
| [프로그래머스] 재구매가 일어난 상품과 회원 리스트 구하기 -LV.2 (0) | 2023.02.01 |
| [프로그래머스] 가격대 별 상품 개수 구하기 -LV.2 (0) | 2023.01.26 |
| [프로그래머스] 상품 별 오프라인 매출 구하기 -LV.2 (0) | 2023.01.19 |
| [프로그래머스] 진료과별 총 예약 횟수 출력하기 -LV.2 (0) | 2023.01.18 |