LV4 자동차 대여 기록 별 대여 금액 구하기
문제 )
CAR_RENTAL_COMPANY_CAR
테이블과CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블과CAR_RENTAL_COMPANY_DISCOUNT_PLAN
테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
(자세한 문제내용과 테이블내용은 프로그래머스에 있습니다.)
# 자동차 대여기록 기준으로 사용 기간과 요금을 한테이블로 결합
with truck AS (
SELECT a.history_id AS HISTORY_ID
, a.car_id
, b.car_type
, b.daily_fee
, DATEDIFF(end_date, start_date)+1 as daydiff
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY a
LEFT JOIN CAR_RENTAL_COMPANY_CAR b ON a.car_id = b.car_id
)
# 할인율 적용 7일 이상 5% / 30일 이상 8% / 90일 이상 15%
SELECT HISTORY_ID
, ROUND(CASE WHEN daydiff < 7 THEN daily_fee*daydiff
WHEN daydiff < 30 THEN (daily_fee-(daily_fee*0.05))*daydiff
WHEN daydiff < 90 THEN (daily_fee-(daily_fee*0.08))*daydiff
ELSE (daily_fee-(daily_fee*0.15))*daydiff END,0) AS FEE
FROM truck
WHERE car_type ='트럭'
ORDER BY FEE DESC , HISTORY_ID DESC
회고
- 굳이 결합할 필요가 없는경우, 필요한 정보만 간단히 메모해놓자.
할인율 정보가 들어간CAR_RENTAL_COMPANY_DISCOUNT_PLAN
테이블의 경우 굳이 JOIN시킬 필요가 없고 '트럭'에 해당하는 할인조건만 뽑아서 메모해도 됬었습니다. 시나리오 과정을 요약하면 다음과 같습니다.
- 자동차 대여기록(HISTORY) 기준으로 사용 기간(daydiff)과 요금(daily_fee)을 한테이블로 결합 (PK:car_id)
- 트럭에 해당하는 차만 뽑아서 문제에서 제시된 할인율을 적용