Allen's 데이터 맛집
프로그래머스 lv. 4 : 자동차 대여 기록 별 대여 금액 구하기 본문
트럭 렌탈 비용 계산
문제
풀이
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