select distinct a.car_id,b.car_type,(round(30*daily_fee*(1-c.discount_rate/100),0)) FEE
from (select * from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where car_id not in (select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY where (DATE_FORMAT(start_date, '%Y-%m') <= '2022-11' AND DATE_FORMAT(end_date, '%Y-%m') >= '2022-11'))) a
join CAR_RENTAL_COMPANY_CAR b on a.car_id = b.car_id
left join CAR_RENTAL_COMPANY_DISCOUNT_PLAN c
on b.car_type = c.car_type
where b.car_type in ('세단','SUV') and c.DURATION_TYPE = '30일 이상'
and ((30*daily_fee*(1-c.discount_rate/100)) between 499999 and 2000000)
문제의 이해를 잘못했다.
조건을 만족하는 대여 금액(대여한 날짜 * 대여 금액)인 줄 알았는데 30일동안의 대여 금액이었다.
30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요
이 문장 때문에 그런 것 같은데, 조건을 만족하는 자동차에 대한 대여 일수 별 대여 금액을 구하라고 이해할 수도 있지 않나?
아무튼 이거 때문에 애먹었다..
car_id not in
(select car_id
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where (DATE_FORMAT(start_date, '%Y-%m') <= '2022-11'
AND DATE_FORMAT(end_date, '%Y-%m') >= '2022-11'))
(start_date, '%Y-%m') <= '2022-11'
AND DATE_FORMAT(end_date, '%Y-%m') >= '2022-11'))
start_date의 연-월(YYYY-MM) 값이 ‘2022-11’보다 이전이거나 같은지,
end_date의 연-월(YYYY-MM) 값이 ‘2022-11’보다 이후이거나 같은지 확인하는 부분이다.
그래야 대여 기간 중 11월이 포함되어 11월에 대여 불가능한 car_id를 추출할 수 있기 때문이다.