데이터분석가/SQL

[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

chan's chance 2023. 3. 6. 16:50

 

 

프로그래머스

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

programmers.co.kr

 

Q. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

거짓말 보태지 않고 수십번 이상 틀린 문제다. 이유는 WHERE 절에서 11월에 해당하지 않는 값들만 필터링하고자 하였는데,

(START_DATE < '2022-11-01' AND END_DATE < '2022-11-01') OR (START_DATE > '2022-11-30' AND END_DATE > '2022-11-30') 으로 하였기 때문인 것으로 추측하고 있다.

 

 

SELECT A.CAR_ID
     , A.CAR_TYPE
     , ROUND(A.DAILY_FEE * 30 * (100 - D30.DISCOUNT_RATE) * 0.01) AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS A
    RIGHT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS B ON A.CAR_ID = B.CAR_ID
    -- discount plan 테이블에서 30일에 해당하는 할인율만 필터링한 SELECT절 서브쿼리를 LEFT JOIN
    LEFT JOIN (SELECT *
             FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
             WHERE DURATION_TYPE = '30일 이상') AS D30 ON A.CAR_TYPE = D30.CAR_TYPE
-- 세단과 SUV만 필터링
WHERE A.CAR_TYPE IN ('세단','SUV')
-- 11월에 해당하는 값들을 제외
    AND A.CAR_ID NOT IN (SELECT CAR_ID 
                         FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                         WHERE START_DATE < '2022-12-01' AND END_DATE >= '2022-11-01')
GROUP BY A.CAR_ID
-- FEE가 50만 이상 200만 미만인 값들을 필터
HAVING FEE BETWEEN 500000 AND 1999999
-- FEE 내림차, CAR_TYPE 오름차, CAR_ID 내림차 정렬
ORDER BY FEE DESC, A.CAR_TYPE ASC, CAR_ID DESC;

실행 결과