https://school.programmers.co.kr/learn/courses/30/lessons/157339
with절로 자동차 타입이 세단, suv 이고 11월 1일 부터 11월 30일 까지 대여 가능한 데이터를 조회합니다.
MAX(end_date) <= '2022-11-01' 조건은 대여 기간이 11월 이전에 끝나는 차량만 선택하는 조건입니다. 이를 사용하는 이유는 11월 이전에 대여가 끝나고 그 이후에 다른 대여가 있을 수 있기 때문입니다.
WITH AA AS (
SELECT A.car_id, A.car_type, daily_fee
FROM car_rental_company_car A
JOIN car_rental_company_rental_history B ON A.car_id = B.car_id
WHERE A.car_type IN ('세단', 'SUV')
GROUP BY A.car_id
HAVING MAX(end_date) <= '2022-11-01')
그 후 AA 테이블과 car_rental_company_discount_plan 을 조인 해줍니다. duration_type = '30일 이상'인 데이터만 불러오고, 대여금액을 계산 후 50만원 이상 200만원 미만인 자동차 데이터를 불러온 후 , 금액별로 내림차순, 자동차 기준으로 오름차순, 자동차 id기준으로 내림차순 정렬해주면 정답입니다.
WITH AA AS (
SELECT A.car_id, A.car_type, daily_fee
FROM car_rental_company_car A
JOIN car_rental_company_rental_history B ON A.car_id = B.car_id
WHERE A.car_type IN ('세단', 'SUV')
GROUP BY A.car_id
HAVING MAX(end_date) <= '2022-11-01')
SELECT AA.car_id, AA.car_type, FLOOR(AA.daily_fee * (100 - C.discount_rate) / 100) * 30 AS FEE
FROM AA
JOIN car_rental_company_discount_plan C ON AA.car_type = C.car_type
WHERE C.duration_type = '30일 이상'
AND FLOOR(AA.daily_fee * (100 - C.discount_rate) / 100) * 30 BETWEEN 500000 AND 1999999
ORDER BY FEE DESC, AA.car_type ASC, AA.car_id DESC;