coding/sql 코딩테스트

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

임이레 2025. 1. 9. 16:23

WITH sub_t AS (
    SELECT a.CAR_ID     
            ,a.CAR_TYPE 
            ,a.DAILY_FEE
            ,b.HISTORY_ID
            ,b.START_DATE
            ,b.END_DATE
            ,DATEDIFF(END_DATE , START_DATE) + 1 as DAY_CNT 
            ,CASE WHEN DATEDIFF(END_DATE , START_DATE) + 1 >= 90  then '90일 이상' 
                  WHEN DATEDIFF(END_DATE , START_DATE) + 1 >= 30  then '30일 이상'
                  WHEN DATEDIFF(END_DATE , START_DATE) + 1 >= 7  then '7일 이상' 
            ELSE 'NONE' END AS DUR_TYPE 
    
    
    FROM CAR_RENTAL_COMPANY_CAR a JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY b ON a.CAR_ID = b.CAR_ID 

    WHERE a.CAR_TYPE = '트럭'
    ) 
    
SELECT HISTORY_ID
        , ROUND(DAILY_FEE * DAY_CNT * (100 - IFNULL(DISCOUNT_RATE , 0)) / 100) AS FEE 
FROM sub_t a LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN b ON a.CAR_TYPE = b.CAR_TYPE
                                                        AND a.DUR_TYPE  = b.DURATION_TYPE 
ORDER BY 2 DESC , 1 DESC

 

 

꽤 복잡했지만,, 여러번의 시도 후 정답을 맞췄다. 

 

 

여기서 병목지점은 CASE WHEN 부분이었다. FILTER 방식으로 90일 이상이 아닌 7일 이상을 먼저 세팅할 경우, 잘못된 방식으로 데이터가 필터링 될 수 있다... 

순서에 유념해야 함을 배워간다.