TIL/SQL

프로그래머스| 자동차 대여 기록 별 대여 금액 구하기(MySQL)

jojoon2786 2024. 8. 9. 17:26

문제 설명

다음은 어느 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블과 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 자동차 종류 별 대여 기간 종류 별 할인 정책 정보를 담은 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블 입니다.

CAR_RENTAL_COMPANY_CAR 테이블은 아래와 같은 구조로 되어있으며, CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS 는 각각 자동차 ID, 자동차 종류, 일일 대여 요금(원), 자동차 옵션 리스트를 나타냅니다.

 

CAR_RENTAL_COMPANY_CAR
CAR_RENTAL_COMPANY_RENTAL_HISTORY

 

CAR_RENTAL_COMPANY_DISCOUNT_PLAN

 

나의 풀이)

SELECT distinct b.HISTORY_ID,
               ROUND(a.DAILY_FEE *
                             CASE WHEN DATEDIFF(b.END_DATE,b.START_DATE) + 1 >= 90 THEN (SELECT (1 - DISCOUNT_RATE * 0.01) FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE car_type = '트럭' and DURATION_TYPE = '90일 이상')
                                        WHEN DATEDIFF(b.END_DATE,b.START_DATE) + 1 >= 30 THEN (SELECT (1 - DISCOUNT_RATE * 0.01) FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE car_type = '트럭' and DURATION_TYPE = '30일 이상')
                                        WHEN DATEDIFF(b.END_DATE,b.START_DATE) + 1 >= 7 THEN (SELECT (1 - DISCOUNT_RATE * 0.01) FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE car_type = '트럭' and DURATION_TYPE = '7일 이상')
                             ELSE 1 END , 0) * (DATEDIFF(b.END_DATE,b.START_DATE) + 1) AS FEE
from CAR_RENTAL_COMPANY_CAR a
join CAR_RENTAL_COMPANY_RENTAL_HISTORY b on a.CAR_ID = b.CAR_ID
join CAR_RENTAL_COMPANY_DISCOUNT_PLAN c on a.CAR_TYPE = c.CAR_TYPE
WHERE a.CAR_TYPE = '트럭'
ORDER BY FEE DESC, b.HISTORY_ID DESC;

 

case when 문의 then에 서브쿼리를 사용해서 각 DURATION_TYPE 별로 다른 할인율을 적용시켜주었다. 

 

^ㅁ^