본문 바로가기
💿 Oracle/프로그래머스 Lv. 1

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

by 동일 2023. 4. 26.

<답>

SELECT
    HISTORY_ID, CAR_ID,
    TO_CHAR(START_DATE,'YYYY-MM-DD') START_DATE,
    TO_CHAR(END_DATE,'YYYY-MM-DD') END_DATE,
    CASE
        WHEN TRUNC(END_DATE) - TRUNC(START_DATE) + 1 >= 30 THEN '장기 대여' 
    ELSE '단기 대여'
    END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE,'YYYY-MM') = '2022-09'
ORDER BY HISTORY_ID DESC;

 

1. 2022년 9월에 대여한 기록에서만 조회

▶ WHERE TO_CHAR(START_DATE,'YYYY-MM') = '2022-09'

▶ 'TO_CHAR'은 날짜형태를 문자열 형태로 변경해준다.

 

2. 대여기간이 30일 이상이면 장기 대여, 그렇지 않으면 단기 대여로 표시하는 컬럼 추가

▶ CASE WHEN 조건 THEN 결과 ELSE 결과 END AS 컬럼명

▶ 'TRUNC()'는 날짜만 남기고 시간은 버린다.

▶ 조건은 밑에 두개 아무거나 사용해도 상관없다.(하지만 문제를 보면 첫번째 것으로 해야 더 정확하다)

     WHEN TRUNC(END_DATE) - TRUNC(START_DATE) + 1 >= 30 THEN '장기 대여' ELSE '단기 대여'

     WHEN TRUNC(END_DATE) - TRUNC(START_DATE) + 1 < 30 THEN '단기 대여' ELSE '장기 대여'

 

▶ 대여종료일 - 대여시작일 + 1로 계산

※ 계산부분에서 실수를 했었는데

    만약 9월 1일에 빌리고 9월 2일에 반납하였다면 이틀 빌린것이기 때문에

    9월2일 - 9월1일 + 1 = 1+1 = 2

    라는 결과가 나오게 된다.

 

3. 대여 기록 ID 기준 내림차순 정렬

▶ ORDER BY 컬럼 DESC 로 내림차순 정렬한다.