코딩테스트/SQL 코드카타
MySQL 프로그래머스 | 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
ANNASENA
2024. 9. 16. 08:00
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/157339
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중
- 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고
- 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서
- 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문 작성하기
- 대여 금액 기준 내림차순, 대여 금액이 같은 경우 자동차 종류 기준 오름차순, 자동차 종류까지 같은 경우 자동차 ID 기준 내림차순 정렬
테이블
CAR_RENTAL_COMPANY_CAR | ![]() |
CAR_RENTAL_COMPANY_RENTAL_HISTORY | ![]() |
CAR_RENTAL_COMPANY_DISCOUNT_PLAN | ![]() |
풀이과정
# '2022-11-01' 부터 '2022-11-30' 까지 대여가 불가능한 자동차만 필터링
- 대여 시작일(START_DATE)이 '2022-11-01' 이전
- 2022년 11월 01일 이전에 대여한 기록이 있는 모든 행들
- 대여 반납일(END_DATE)이 '2022-11-01' 이후
- 2022년 11월 01일 이후에 반납한 기록이 있는 모든 행들
- 즉, 자동차 중 2022년 11월 01일 이전에 대여를 해갔는데, 11월 01일 이후에나 반납이 되는 자동차는
2022년 11월 01일부터 11월 30일까지 빌리려는 고객에게 대여가 불가능함
1 2 3 4 5 6 7 8 | SELECT * FROM CAR_RENTAL_COMPANY_CAR CC LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY RH ON CC.CAR_ID = RH.CAR_ID AND RH.START_DATE < '2022-11-01' AND RH.END_DATE >= '2022-11-01' | cs |
# 문제 조건에 맞게 '2022-11-01'부터 '2022-11-30'까지 대여가 가능한 자동차만 필터링 하기
- 자동차 정보 테이블 + 자동차 대여 기록 테이블 + 자동차 대여기간 별 할인율 테이블 모두 조인
- 문제 조건에 따라 '30일 이상' 대여할 경우의 할인율을 자동차 종류('세단', 'SUV')에 따라 적용 후 FEE 계산
- WHERE 조건에서 대여 기록이 없는 자동차 (즉, 11월 01부터 11월 30일까지 대여 가능한 자동차) 필터링하기
- 자동차 종류는 '세단' 또는 'SUV'일 것
- FEE는 50만원에서 200만원 사이일 것
- 마지막으로 정렬기준까지 주면 끝!
# 정답
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT CC.CAR_ID, CC.CAR_TYPE, ROUND(CC.DAILY_FEE * (1 - DP.DISCOUNT_RATE*0.01) * 30, 0) AS FEE FROM CAR_RENTAL_COMPANY_CAR CC LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY RH ON CC.CAR_ID = RH.CAR_ID AND RH.START_DATE < '2022-11-01' AND RH.END_DATE >= '2022-11-01' JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN DP ON CC.CAR_TYPE = DP.CAR_TYPE AND DP.DURATION_TYPE LIKE '30%' WHERE CC.CAR_TYPE IN ('세단', 'SUV') AND RH.HISTORY_ID IS NULL -- 2022년 11월 1일부터 11월 30일 사이에 대여 이력이 없는 자동차만 선택 HAVING FEE BETWEEN 500000 AND 2000000 ORDER BY FEE DESC, CC.CAR_TYPE ASC, CC.CAR_ID DESC; | cs |
728x90