CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서
자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서
대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여
대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요.
결과는 대여 금액을 기준으로 내림차순 정렬하고,
대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
SELECT H.HISTORY_ID, ROUND((DATEDIFF(H.END_DATE, H.START_DATE)+1) * C.DAILY_FEE * (
CASE WHEN DATEDIFF(H.END_DATE, H.START_DATE)+1 < 7 THEN 1
WHEN DATEDIFF(H.END_DATE, H.START_DATE)+1 < 30 THEN 0.95
WHEN DATEDIFF(H.END_DATE, H.START_DATE)+1 < 90 THEN 0.92
ELSE 0.85 END)) as FEE
FROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID=H.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN D ON C.CAR_TYPE=D.CAR_TYPE
WHERE C.CAR_TYPE = '트럭'
GROUP BY HISTORY_ID
ORDER BY FEE DESC, H.HISTORY_ID DESC
DATEDIFF() 함수를 이용해서 두 날짜 사이의 일 수를 계산하는 문제였다.
주의할 점은 총 몇일간 대여했는지 구해야 하기 때문에 1을 더해야 한다는 것이다.
(ex: START_DATE = 2023-02-20, END_DATE = 2023-02-20일 때, DATEDIFF(END_DATE, START_DATE) = 0 인데 하루를 빌렸으므로 1이 정답)