본문 바로가기
SQL

[SQL 고득점 Kit] String, Date : 자동차 대여 기록 별 대여 금액 구하기

by shur_ 2024. 8. 22.

https://school.programmers.co.kr/learn/courses/30/lessons/151141

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

 

 

최종 쿼리

WITH HISTORY AS(
    SELECT
        A.HISTORY_ID,
        A.CAR_ID,
        B.DAILY_FEE,
        (DATEDIFF(A.END_DATE, A.START_DATE) + 1) AS DURATION,
        CASE
            WHEN DATEDIFF(A.END_DATE, A.START_DATE) + 1 >= 90 THEN '90일 이상'
            WHEN DATEDIFF(A.END_DATE, A.START_DATE) + 1 >= 30 THEN '30일 이상'
            WHEN DATEDIFF(A.END_DATE, A.START_DATE) + 1 >= 7 THEN '7일 이상'
            ELSE '할인 없음'
        END AS DURATION_TYPE
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A
        JOIN CAR_RENTAL_COMPANY_CAR B
        ON A.CAR_ID = B.CAR_ID AND B.CAR_TYPE = '트럭')
        
SELECT
    A.HISTORY_ID,
    CASE
        WHEN A.DURATION_TYPE = '할인 없음' THEN ROUND(A.DAILY_FEE*A.DURATION, 0)
        ELSE ROUND(A.DAILY_FEE*A.DURATION*(1-B.DISCOUNT_RATE/100), 0)
    END AS FEE
FROM HISTORY A
    LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN B
    ON A.DURATION_TYPE = B.DURATION_TYPE AND B.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC;

댓글