문제
TROUBLE POINT
트럭의 요금만 계산하는것이니..
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블을 JOIN하는데 있어서 문제가 존재하지는 않았다.
다만 이제 할인비율을 계산할때 7일 미만인 것을 다루는 것이 불편했다.
END_DATE-START_DATE+1을 통해 대여 일을 계산하여 그것에 따른 컬럼을 하나 더 CASE문으로 생성하는데에는 문제가 없지만 DISCOUNT_RATE와 연결을 하기엔 0미만의 값이없다.
생각해보면 OUTER JOIN이나 FULL JOIN을 이용 해도 됬겠지만 그렇게하기엔 일이 너무 커지는 것 같아 논리적으로 더 꼬이기전에 차라리 적당한 하드코딩으로 문제를 해결했다.
해답
SELECT B.HISTORY_ID, CASE
WHEN END_DATE-START_DATE+1>=90 THEN A.DAILY_FEE*(END_DATE-START_DATE+1)*(1-0.01*(SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE DURATION_TYPE LIKE '%90%'
AND CAR_TYPE='트럭'))
WHEN END_DATE-START_DATE+1<90 AND END_DATE-START_DATE+1>=30 THEN A.DAILY_FEE*(END_DATE-START_DATE+1)*(1-0.01*(SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE DURATION_TYPE LIKE '%30%'
AND CAR_TYPE='트럭'))
WHEN END_DATE-START_DATE+1<30 AND END_DATE-START_DATE+1>=7 THEN A.DAILY_FEE*(END_DATE-START_DATE+1)*(1-0.01*(SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE DURATION_TYPE LIKE '%7%'
AND CAR_TYPE='트럭'))
ELSE A.DAILY_FEE*(END_DATE-START_DATE+1) END AS FEE
FROM CAR_RENTAL_COMPANY_CAR A , CAR_RENTAL_COMPANY_RENTAL_HISTORY B
WHERE (A.CAR_ID = B.CAR_ID) AND A.CAR_TYPE='트럭'
ORDER BY FEE DESC, B.HISTORY_ID DESC
CASE마다 값을 계산할때 SUB쿼리로 값을 불러와서 계산했다.
성능에 관해 잘 모르는 나에게도 성능이 좋지 않을것으로 보이기에 이문제는 다음에 한번 더 FULL JOIN을 이용해 풀고 풀이를 다시 한번 추가하도록 하겠다.