-
특정 기간동안 대여 가능한 자동차들의 대여비용 구하기SQL 문제 2024. 1. 29. 10:14
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과
CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.# 11월에 대여가 불가능한 차량 with Impossible as( select car_id from car_rental_company_rental_history where date_format(start_date,'%Y-%m-%d') <= '2022-11-01' and date_format(end_date,'%Y-%m-%d') >= '2022-11-01' ) #할인 ,discount_group as ( select car_type, duration_type, discount_rate from CAR_RENTAL_COMPANY_DISCOUNT_PLAN where car_type in ('SUV','세단') and duration_type ='30일 이상' ) select car.car_id, car.car_type, round(car.daily_fee * 30 * (1- dis.discount_rate/100)) as FEE from car_rental_company_car as car join discount_group as dis on car.car_type = dis.car_type where car_id not in (select car_id from Impossible) having FEE BETWEEN 500000 AND 2000000
문제의 조건이 까다로워서 2개로 나누었다.
1. 대여 기간이 무조건 11월 사이인 경우
=> 대여 시작일이 11월 1일부터 가능한 경우만 조회할 것이라서 그 전부터 대여가 시작되면 제외시킨다.
마찬가지로 대여 완료가 11월 1일 전에 완료가 되어야 새로운 대여가 가능하기 때문에
대여 종료일을 설정한다.
2. 대여 기간이 30일 이상 & 세단 ,SUV인 경우
with 문을 사용해서 조건을 건 가상의 테이블을 만든다.
3.메인 쿼리 where절에는 우리가 1에 설정한 car_id가 들어가면 안되기 때문에
NOT IN으로 제외를 시키고 우리가 추출한 데이터들을 having절로 fee의 조건을 제시했다.
'SQL 문제' 카테고리의 다른 글
leecode - 1280. Students and Examinations (0) 2024.02.27 leeCode - 1661. Average Time of Process per Machine (1) 2024.02.27 프로그래머스 - 입양 시각 구하기(2)_set @ (0) 2024.01.09 프로그래머스 - 조건에 부합하는 중고거래 댓글 조회하기 (0) 2024.01.09 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기 (0) 2024.01.09