
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
| Column name | Type | Nullable |
|---|---|---|
| HISTORY_ID | INTEGER | FALSE |
| CAR_ID | INTEGER | FALSE |
| START_DATE | DATE | FALSE |
| END_DATE | DATE | FALSE |
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
대여 시작일과 종료일의 차이가 30을 기준으로 단기 대여, 장기 대여 여부를 나누는 새로운 컬럼을 추가하는 문제이다.
이때 날짜의 차이는 DATEDIFF() 함수를 사용하여 구할 수 있는데, 이때 DATEDIFF() 함수는 종료일을 포함하지 않으므로 이 값에 +1을 해주어서 장기/단기를 구분해주어야 한다.
또한, 30일을 기준으로 장기/단기를 나눌 때는 CASE WHEN 절을 사용하여 나눌 수 있다.
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) + 1) >= 30
THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER
BY HISTORY_ID DESC;
이제 점점 복잡한 문제들이 등장하는 것 같다.
https://school.programmers.co.kr/learn/courses/30/lessons/151138