https://school.programmers.co.kr/learn/courses/30/lessons/151141
3개의 테이블을 합쳐서 대여 기록 별로 대여 금액을 구하는 문제입니다.
일단 with절에서 2개의 테이블을 합친 후 CASE문을 이용해서 칼럼을 하나 만들어줍니다. 대여 종료일 - 대여 시작을 빼주고, 할인 정책 별로
구분해주고 트럭에 정보만 불러옵니다.
이제 다른 테이블의 정보를 가지고와서 합쳐줘야하는데요. 트럭에 대한 정보만 담긴 테이블 기준으로 LEFT 조인을 해줍니다. 이제
대여 기록 별 대여 금액을 구해야하는데요.
할인 없는 값은 일일 대여 요금 * 대여 날짜 값만 가져오면 되고,
할인이 적용이 되면, 요금에 할인율을 곱하고, 대여 날짜 값을 곱하면 대여 금액을 구할 수 있습니다.
구한 값을 내림차순으로 정렬, 자동차 대여 기록 ID 내림차순 정렬 해주면 정답입니다.
with DAY AS (
SELECT history_id,DAILY_FEE,car_type,start_date,end_date,
CASE WHEN (DATEDIFF(end_date,start_date) +1) BETWEEN 7 AND 29 THEN '7일 이상'
WHEN (DATEDIFF(end_date,start_date) +1) BETWEEN 30 AND 89 THEN '30일 이상'
WHEN (DATEDIFF(end_date,start_date) +1) >= 90 THEN '90일 이상' END DURATION_TYPE
FROM car_rental_company_car A join car_rental_company_rental_history B
ON A.car_id = B.car_id
WHERE car_type = '트럭')
SELECT History_id,
CASE WHEN DISCOUNT_RATE IS null THEN daily_fee * (DATEDIFF(end_date,start_date) +1)
ELSE FLOOR(daily_fee * (100 - DISCOUNT_RATE)/100) * (DATEDIFF(end_date,start_date) +1) END FEE
FROM DAY LEFT join car_rental_company_discount_plan C
ON DAY.car_type = C.car_type AND DAY.duration_type = C.duration_type
ORDER BY FEE DESC, history_id DESC