https://school.programmers.co.kr/learn/courses/30/lessons/151141
문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
문제 푸는 순서
CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 행만 따로 구하기
실제 이용 날짜 계산하기
대여 기록 별로 대여 금액(컬럼명: FEE)을 구하기.
DAILY_FEE대여날짜(end_date-start_date)+1할인율(7일 미만은 할인x)
대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬
정답
SELECT HISTORY_ID
, round(DAILY_FEE * (DATEDIFF(B.END_DATE,B.START_DATE)+1)
* (case
when DATEDIFF(END_DATE,START_DATE)+1 < 7 then 1
when DATEDIFF(END_DATE,START_DATE)+1 < 30 then 0.95
when DATEDIFF(END_DATE,START_DATE)+1 < 90 then 0.92
else 0.85 end)) as "FEE"
FROM CAR_RENTAL_COMPANY_CAR A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B ON A.CAR_ID =B.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN C ON A.CAR_TYPE = C.CAR_TYPE
WHERE A.CAR_TYPE = '트럭'
GROUP BY HISTORY_ID
order by FEE desc , HISTORY_ID desc```
풀이는 생각보다 간단했는데 이렇게 길어질줄 모르고 문제를 풀다보니 생각보다 길어져서 다시 정리가 필요했던 문제였다