프로그래머스-코딩테스트/mysql

자동차 대여 기록 별 대여 금액 구하기

아임블로거 2023. 4. 16. 18:46

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

 

 

WITH PP AS 
    (
        SELECT DISCOUNT_RATE, DURATION_TYPE
        FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
        WHERE CAR_TYPE = '트럭'
    )


SELECT HISTORY_ID, ROUND(DUR*DAILY_FEE*(100-RATE)/100) FEE
FROM
(
    SELECT HISTORY_ID, DATEDIFF(END_DATE, START_DATE)+1 AS DUR
       , CASE WHEN DATEDIFF(END_DATE, START_DATE)+1 BETWEEN 7 AND 29 THEN (SELECT DISCOUNT_RATE FROM PP WHERE DURATION_TYPE LIKE '7%')
              WHEN DATEDIFF(END_DATE, START_DATE)+1 BETWEEN 30 AND 89 THEN (SELECT DISCOUNT_RATE FROM PP WHERE DURATION_TYPE LIKE '30%')
              WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 90 THEN (SELECT DISCOUNT_RATE FROM PP WHERE DURATION_TYPE LIKE '90%')
              ELSE 0 END RATE, DAILY_FEE  
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY CC
    JOIN CAR_RENTAL_COMPANY_CAR CR ON CR.CAR_ID = CC.CAR_ID
WHERE CR.CAR_TYPE = '트럭'
) SUB
ORDER BY FEE DESC, HISTORY_ID DESC