1. 문제 풀이 아이디어
WITH
절을 사용하여CAR_RENTAL_COMPANY_RENTAL_HISTORY
와CAR_RENTAL_COMPANY_CAR
를 조인해 트럭 대여 정보를 가져온다.
CAR_RENTAL_COMPANY_DISCOUNT_PLAN
에서 트럭 할인 정보를 추출하고 대여 일수에 해당하는 최소 할인율을 찾아 적용한 후, 총 대여 요금을 계산하여 문제를 해결한다.
2. 나의 정답 코드
WITH TRUCK AS (
SELECT
HISTORY_ID,
DAILY_FEE,
DATEDIFF(END_DATE, START_DATE) + 1 RENTAL_DAYS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
JOIN CAR_RENTAL_COMPANY_CAR USING(CAR_ID)
WHERE CAR_TYPE = '트럭'
),
PLAN AS (
SELECT
SUBSTRING_INDEX(DURATION_TYPE, '일', 1) DURATION,
(100 - DISCOUNT_RATE) / 100 DISCOUNT
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE CAR_TYPE = '트럭'
)
SELECT
HISTORY_ID,
ROUND(
RENTAL_DAYS * DAILY_FEE *
IFNULL((SELECT MIN(DISCOUNT) FROM PLAN WHERE RENTAL_DAYS >= DURATION), 1)
) FEE
FROM TRUCK
ORDER BY FEE DESC, HISTORY_ID DESC;
3. 정리
TRUCK
서브쿼리에서 트럭 대여 정보를 추출한다.
PLAN
서브쿼리에서 할인율 정보를 가져온다.
SELECT
절에서RENTAL_DAYS
와DAILY_FEE
를 곱한 후, 해당하는 최소 할인율을 적용하여 총 요금을 계산한다.
ORDER BY
를 사용해 총 요금 기준 내림차순 정렬 후, 동일한 요금일 경우HISTORY_ID
기준 내림차순 정렬한다.
Share article