ღ yuni_world ღ

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

MySQL/프로그래머스

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

ღ유닝이ღ 2025. 10. 22. 20:19

📌 문제링크

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

 

코딩테스트 연습 - 자동차 대여 기록 별 대여 금액 구하기

알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려

school.programmers.co.kr


📌 문제풀이

with

raw1 as (
    select a.car_id, a.car_type, a.daily_fee, b.history_id, daydiff,
        case
            when daydiff >= 90 then '90일 이상'
            when daydiff >= 30 then '30일 이상'
            when daydiff >= 7 then '7일 이상'
            else '이 외'
        end as duration
    from CAR_RENTAL_COMPANY_CAR a right join 
        (select history_id, car_id, (datediff(end_date,start_date)+1) as daydiff 
         from CAR_RENTAL_COMPANY_RENTAL_HISTORY) b on a.car_id=b.car_id
    where a.car_type = '트럭')

select history_id, 
    truncate(daydiff*daily_fee*(100-IFNULL(discount_rate, 0))/100, 0) as fee
from raw1 a left join CAR_RENTAL_COMPANY_DISCOUNT_PLAN b on a.duration=b.duration_type and b.car_type='트럭'
order by 2 desc, 1 desc

📖 NOTE

- datediff 함수는 시작일과 종료일의 차이를 계산할 때 종료일을 포함하지 않기 때문에, 실제 대여 기간(위 쿼리에서 daydiff 컬럼)을 정확히 구하기 위해서는 계산 결과에 1을 더해준다.

- 출력 조건에 맞게 정수부분만 출력하기 위해 truncate함수를 사용하여 소수점 아래 부분은 제거