[프로그래머스 SQL 고득점 Kit] 자동차 대여 기록 별 대여 금액 구하기

hy_jin·2023년 11월 9일
0

SQL

목록 보기
9/11

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```


풀이는 생각보다 간단했는데 이렇게 길어질줄 모르고 문제를 풀다보니 생각보다 길어져서 다시 정리가 필요했던 문제였다
profile
천천히 꾸준히

0개의 댓글