[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기
WITH sub_t AS (
SELECT a.CAR_ID
,a.CAR_TYPE
,a.DAILY_FEE
,b.HISTORY_ID
,b.START_DATE
,b.END_DATE
,DATEDIFF(END_DATE , START_DATE) + 1 as DAY_CNT
,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 'NONE' END AS DUR_TYPE
FROM CAR_RENTAL_COMPANY_CAR a JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY b ON a.CAR_ID = b.CAR_ID
WHERE a.CAR_TYPE = '트럭'
)
SELECT HISTORY_ID
, ROUND(DAILY_FEE * DAY_CNT * (100 - IFNULL(DISCOUNT_RATE , 0)) / 100) AS FEE
FROM sub_t a LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN b ON a.CAR_TYPE = b.CAR_TYPE
AND a.DUR_TYPE = b.DURATION_TYPE
ORDER BY 2 DESC , 1 DESC
꽤 복잡했지만,, 여러번의 시도 후 정답을 맞췄다.
여기서 병목지점은 CASE WHEN 부분이었다. FILTER 방식으로 90일 이상이 아닌 7일 이상을 먼저 세팅할 경우, 잘못된 방식으로 데이터가 필터링 될 수 있다...
순서에 유념해야 함을 배워간다.