코드카타

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

PARK JI HO 2023. 12. 23. 17:00

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 
대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 
대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는
컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요.
결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE,'%Y-%m-%d') START_DATE,
        DATE_FORMAT(END_DATE,'%Y-%m-%d') END_DATE,
        CASE WHEN DATEDIFF(END_DATE,START_DATE) >=29 THEN "장기 대여"
            ELSE "단기 대여" END RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,'%Y-%m') = '2022-09'
ORDER BY 1 DESC

 

1. DATEDIFF를 통해 대여 기간을 구해준다.

2. 30일 이상이면 장기대여 그 외에는 단기 대여로 주고 RENT_TYPE에 할당

3. WHERE로 2022년 9월에 속하는 것들만

 

30일 이상인데 왜 >= 29로 했느냐?

30으로 하니까 END_DATE - START_DATE 결과가 0이 나오는 행이 있었다.

그래서 보통 DATEDIFF(END_DATE,START_DATE) >=29  또는

DATEDIFF(END_DATE,START_DATE)  + 1>=30을 해주더라