자동차 대여 기록별 대여금액 구하기
➔트럭을 대여한 이력에 대해 대여 기간에 따라 할인율을 적용하여 할인된 요금을 계산하고, FEE 내림차순, HISTORY_ID 내림차순으로 정렬해 출력하라.
🔑 핵심
CAR_RENTAL_COMPANY_CAR과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블을 이용한 CTE를 생성한다.
CTE에서는 CAR_RENTAL_COMPANY_DISCOUNT_PLAN와 JOIN하여 할인값을 출력할 DURATION_TYPE을 생성해 준다.
추가로 총 가격을 구하기 위한 대여일도 생성해 주었다.💡 주요 처리 흐름
HISTORY CTE에서 트럭 대여 이력과 대여 기간을 구분함
DURATION_TYPE에 따라 할인 정책을 LEFT JOIN ➔ 7일 미만은 0으로 생성하였기 때문에 메인 쿼리에서 INNER JOIN 시 빠지게 됌
IFNULL()로 할인율이 없는 경우 0으로 처리
TRUNCATE로 소수점 절삭 (내림 처리)
WITH HISTORY AS(
SELECT HISTORY_ID, C.DAILY_FEE, CASE
WHEN DATEDIFF(END_DATE,START_DATE) + 1 >= 90 THEN '90일 이상'
WHEN DATEDIFF(END_DATE,START_DATE) + 1 >= 30 THEN '30일 이상'
WHEN DATEDIFF(END_DATE,START_DATE) + 1 >= 7 THEN '7일 이상'
ELSE 0 END AS DURATION_TYPE
, DATEDIFF(END_DATE,START_DATE) + 1 AS DAYS
FROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H
ON C.CAR_ID = H.CAR_ID AND C.CAR_TYPE = '트럭')
SELECT HISTORY_ID, TRUNCATE(DAILY_FEE * DAYS * (1 - IFNULL(DISCOUNT_RATE,0)/100),0) AS FEE
FROM HISTORY H LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN C
ON H.DURATION_TYPE = C.DURATION_TYPE AND C.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC