문제 설명
다음은 어느 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 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, 자동차 종류, 일일 대여 요금(원), 자동차 옵션 리스트를 나타냅니다.
나의 풀이)
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 별로 다른 할인율을 적용시켜주었다.
^ㅁ^
'TIL > SQL' 카테고리의 다른 글
리트코드| 온도 상승(MySQL) (0) | 2024.08.22 |
---|---|
프로그래머스| 상품을 구매한 회원 비율 구하기 (0) | 2024.08.14 |
프로그래머스| 입양 시각 구하기(2) (MySQL) <RECURSIVE CTE> (2) | 2024.08.07 |
프로그래머스| 오프라인/온라인 판매 데이터 통합하기(My SQL) (0) | 2024.08.05 |
프로그래머스| 그룹별 조건에 맞는 식당 목록 출력하기(My SQL) (0) | 2024.08.02 |