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

는는·2023년 4월 5일
0

SQL - 문제 풀이

목록 보기
60/77

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

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;

0개의 댓글