DB

[MySQL] 프로그래머스 - 자동차 대여 기록 별 대여 금액 구하기

연듀 2023. 2. 14. 18:02

https://school.programmers.co.kr/learn/courses/30/lessons/151141

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

WITH TRUCK AS(
    SELECT HISTORY.HISTORY_ID, CAR.DAILY_FEE, (DATEDIFF(END_DATE, START_DATE)+1) DAYS,
    CASE 
        WHEN(DATEDIFF(END_DATE, START_DATE)+1) >= 90 THEN '90일 이상'
        WHEN(DATEDIFF(END_DATE, START_DATE)+1) >= 30 THEN '30일 이상'
        WHEN(DATEDIFF(END_DATE, START_DATE)+1) >= 7 THEN '7일 이상'
    END DURATION_TYPE
    FROM CAR_RENTAL_COMPANY_CAR CAR
    LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY HISTORY
    ON CAR.CAR_ID = HISTORY.CAR_ID
    WHERE CAR.CAR_TYPE = '트럭'
)

SELECT TRUCK.HISTORY_ID, ROUND((TRUCK.DAILY_FEE * (1.0 - IFNULL(PLAN.DISCOUNT_RATE * 0.01, 0))) * TRUCK.DAYS, 0) FEE
FROM TRUCK
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
ON TRUCK.DURATION_TYPE = PLAN.DURATION_TYPE AND PLAN.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC

 

자동차 정보 테이블과 대여 기록 정보 테이블을 CAR_ID로 조인해 TRUCK 테이블을 뽑는다. 이 때 대여시작일과 대여종료일의 차이에 따라 DURATION_TYPE을 나눠서 출력한다.

 

그리고 이 TRUCK 테이블과 할인정책정보 테이블을 조인한다. 이 때 주의해야할 점이 같은 DURATION_TYPE과 CAR_TYPE이 트럭인 것들끼리 조인해야한다.