자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블
자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블
자동차 종류 별 대여 기간 종류 별 할인 정책 정보를 담은 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블
자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: 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