본문 바로가기
Stay Hungry Stay Foolish/SQL

[MYSQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

by HANNI하니 2023. 10. 4.

사용 언어 - MYSQL

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

 

프로그래머스

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

programmers.co.kr

 

 

정답

서브쿼리, JOIN절 (정답 맞춘 여부 X

1. CAR_ID에 NOT IN 서브쿼리절

해당 날짜에 대여중일려면, START_DATE < 2022-11-01 < 2022-11-30 < END_DATE 여야 한다.

END_DATE > "2022-11-01" AND START_DATE < "2022-12-01"

 

2. CAR_ID로 그루핑 후, CAR_TYPE과 FEE 조건을 걸어준다.

 

3. FEE : 10% 할인 적용 = (100-10)/100 = *0.9

ROUND() 정수부분만 출력

 

+ 변수 타입이 원래 VARCHAR/DATE 이면, 형태변화없이 비교가 가능하다.

P.DURATION_TYPE = "30일 이상" 

START_DATE < "2022-12-01"

SELECT A.CAR_ID, A.CAR_TYPE, ROUND(A.DAILY_FEE*30*(100-P.DISCOUNT_RATE)/100) AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H ON A.CAR_ID = H.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS P ON A.CAR_TYPE = P.CAR_TYPE

WHERE A.CAR_ID NOT IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE END_DATE > "2022-11-01" AND START_DATE < "2022-12-01"
) AND P.DURATION_TYPE = '30일 이상'

GROUP BY A.CAR_ID
HAVING A.CAR_TYPE IN ('세단', 'SUV') AND (FEE >= 500000 AND FEE < 2000000)
ORDER BY FEE DESC, CAR_TYPE, CAR_ID DESC;

 

 

 

레퍼런스

  • 정답 깃허브

https://github.com/yyeongeun/codingtest/blob/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%20MYSQL/%ED%8A%B9%EC%A0%95%EA%B8%B0%EA%B0%84%EB%8F%99%EC%95%88%EB%8C%80%EC%97%AC%EA%B0%80%EB%8A%A5%ED%95%9C%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%A4%EC%9D%98%EB%8C%80%EC%97%AC%EB%B9%84%EC%9A%A9%EA%B5%AC%ED%95%98%EA%B8%B0.sql

댓글