본문 바로가기

Algorithm/[프로그래머스] - MySQL

[프로그래머스] LV.1 자동차 대여 기록에서 장기/단기 대여 구분하기

 

문제

 

 

풀이

1. WHERE로 START_DATE가 2022년 9월인 기록만 찾기
2. START_DATE, END_DATE 포맷팅하기
3. RENT_TYPE이라는 컬럼을 추가하고 END_DATE - START_DATE에 따라 다르게 표기하기
4. HISTORY_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,
    CASE WHEN DATEDIFF(END_DATE, START_DATE) >= 30 THEN '장기 대여'
        ELSE '단기 대여'
        END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE >= '2022-09-01' AND START_DATE < '2022-10-01'
ORDER BY HISTORY_ID DESC;

 

그런데 오답 판정을 받아서 뭐가 문제인가 했더니

 

DATEDIFF(END_DATE, START_DATE) >= 30

여기가 문제였다 😅😅😅

대여 기간이 1일인 경우에는 DATEDIFF가 0이므로, 저건 대여 기간이 31일 이상인 걸 찾는 조건이 되는 것이다

 

 

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,
    CASE WHEN DATEDIFF(END_DATE, START_DATE) >= 29 THEN '장기 대여'
        ELSE '단기 대여'
        END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE >= '2022-09-01' AND START_DATE < '2022-10-01'
ORDER BY HISTORY_ID DESC;

 

30 -> 29로 수정하니 정답이 되었다