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

박정재·2023년 3월 14일
0

문제 설명

자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블

  • CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS 는 각각 자동차 ID, 자동차 종류, 일일 대여 요금(원), 자동차 옵션 리스트
  • 자동차 종류는 '세단', 'SUV', '승합차', '트럭', '리무진'

자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블

  • HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일

자동차 종류 별 대여 기간 종류 별 할인 정책 정보를 담은 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블

  • PLAN_ID, CAR_TYPE, DURATION_TYPE, DISCOUNT_RATE 는 각각 요금 할인 정책 ID, 자동차 종류, 대여 기간 종류, 할인율(%)
  • 할인율이 적용되는 대여 기간 종류로는 '7일 이상' (대여 기간이 7일 이상 30일 미만인 경우), '30일 이상' (대여 기간이 30일 이상 90일 미만인 경우), '90일 이상' (대여 기간이 90일 이상인 경우)
  • 대여 기간이 7일 미만인 경우 할인정책이 없다.

자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력. 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬.

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/151141

문제 풀이

SELECT
    HISTORY_ID,
    CASE
    	WHEN HISTORY.DURATION_TYPE = '7일 이상' THEN ROUND((100 - DISCOUNT_RATE) / 100 * DAILY_FEE * RENT_DATE, 0)
    	WHEN HISTORY.DURATION_TYPE = '30일 이상' THEN ROUND((100 - DISCOUNT_RATE) / 100 * DAILY_FEE * RENT_DATE, 0)
    	WHEN HISTORY.DURATION_TYPE = '90일 이상' THEN ROUND((100 - DISCOUNT_RATE) / 100 * DAILY_FEE * RENT_DATE, 0)
    	ELSE DAILY_FEE * RENT_DATE
    END AS FEE
FROM (
    SELECT
        HISTORY_ID,
        CAR_ID,
        DATEDIFF(END_DATE, START_DATE) + 1 AS RENT_DATE,
        CASE
            WHEN DATEDIFF(END_DATE, START_DATE) BETWEEN 6 AND 28 THEN '7일 이상'
            WHEN DATEDIFF(END_DATE, START_DATE) BETWEEN 29 AND 88 THEN '30일 이상'
            WHEN DATEDIFF(END_DATE, START_DATE) >= 89 THEN '90일 이상'
        END AS DURATION_TYPE
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
) AS HISTORY
LEFT JOIN CAR_RENTAL_COMPANY_CAR AS CAR
ON HISTORY.CAR_ID = CAR.CAR_ID
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS PLAN
ON 
    CAR.CAR_TYPE = PLAN.CAR_TYPE AND
    HISTORY.DURATION_TYPE = PLAN.DURATION_TYPE
WHERE CAR.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC
profile
Keep on dreaming and dreaming

0개의 댓글