Allen's 데이터 맛집

프로그래머스 lv. 4 : 자동차 대여 기록 별 대여 금액 구하기 본문

SQL/SQL 문제풀이

프로그래머스 lv. 4 : 자동차 대여 기록 별 대여 금액 구하기

Allen93 2024. 1. 24. 06:08
트럭 렌탈 비용 계산

 

문제

 

 

풀이

SELECT 
    history_id,    
    CASE
        WHEN DATEDIFF(end_date, start_date)+1 BETWEEN 7 AND 29 THEN 
            ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1) * (
                SELECT (100 - DISCOUNT_RATE) / 100 
                FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN 
                WHERE car_type = '트럭' AND duration_type = '7일 이상'
            ), 0)
        WHEN DATEDIFF(end_date, start_date)+1 BETWEEN 30 AND 89 THEN 
            ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1) * (
                SELECT (100 - DISCOUNT_RATE) / 100 
                FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN 
                WHERE car_type = '트럭' AND duration_type = '30일 이상'
            ), 0)
        WHEN DATEDIFF(end_date, start_date)+1 >= 90 THEN 
            ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1) * (
                SELECT (100 - DISCOUNT_RATE) / 100 
                FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN 
                WHERE car_type = '트럭' AND duration_type = '90일 이상'
            ), 0)
        ELSE ROUND(daily_fee * (DATEDIFF(end_date, start_date)+1), 0)
    END AS fee
FROM 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY a 
JOIN 
    CAR_RENTAL_COMPANY_CAR b ON a.CAR_ID = b.CAR_ID
WHERE 
    b.CAR_TYPE = '트럭'
ORDER BY 
    fee DESC, history_id DESC;

 

1. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_CAR 테이블을 조인하여 트럭 렌탈 이력과 관련된 정보를 가져옵니다.


2. 각각의 대여 기간에 따라 대여비용을 계산하는데, 7일 이상, 30일 이상, 90일 이상의 경우에는 각각 다른 할인율을 적용합니다.


3. CASE 문을 사용하여 대여 기간에 따라 다른 계산을 수행하고, 결과를 fee 컬럼에 저장합니다.
결과를 대여 비용(fee)을 기준으로 내림차순으로 정렬하며, 동일한 대여 비용의 경우 이력 ID(history_id)를 기준으로 내림차순으로 정렬합니다.

 

 

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

 

프로그래머스

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

programmers.co.kr

 

728x90