*프로그래머스 SQL 문제 풀이입니다.
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
SELECT B.HISTORY_ID, MIN(A.DAILY_FEE*(B.END_DATE-B.START_DATE+1)*NVL(DISCOUNT_RATE,1)) AS FEE
FROM CAR_RENTAL_COMPANY_CAR A LEFT OUTER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B
ON A.CAR_ID = B.CAR_ID
LEFT OUTER JOIN (
SELECT CAR_TYPE, DURATION_TYPE, 1-(DISCOUNT_RATE/100) AS DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
) C
ON A.CAR_TYPE = C.CAR_TYPE
AND (B.END_DATE-B.START_DATE+1) >= TO_NUMBER(REGEXP_REPLACE(C.DURATION_TYPE,'[^0-9]'))
WHERE A.CAR_TYPE = '트럭'
GROUP BY HISTORY_ID
ORDER BY FEE DESC, HISTORY_ID DESC
---