https://school.programmers.co.kr/learn/courses/30/lessons/157339
Level 4


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를 기준으로 내림차순 정렬해주세요.
SELECT C.CAR_ID, C.CAR_TYPE, ROUND(C.DAILY_FEE*30*(1-P.DISCOUNT_RATE/100)) AS FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P ON C.CAR_TYPE = P.CAR_TYPE AND P.DURATION_TYPE = '30일 이상'
WHERE C.CAR_TYPE IN ('SUV', '세단')
GROUP BY C.CAR_ID
HAVING MIN(H.START_DATE) > '2022-11-30' OR MAX(H.END_DATE) < '2022-11-01' AND FEE BETWEEN 500000 AND 2000000
ORDER BY 3 DESC, 2, 1 DESC;
SELECT C.CAR_ID, C.CAR_TYPE, C.DAILY_FEE*(100-P.DISCOUNT_RATE)/100 * 30 FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P
ON C.CAR_TYPE = P.CAR_TYPE
WHERE P.DURATION_TYPE = '30일 이상'
AND C.CAR_TYPE IN ('세단', 'SUV')
AND NOT EXISTS (
SELECT 1
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H
WHERE H.CAR_ID = C.CAR_ID
AND H.START_DATE <= DATE '2022-11-30'
AND H.END_DATE >= DATE '2022-11-01'
)
AND C.DAILY_FEE * (100 - P.DISCOUNT_RATE) / 100 * 30 >= 500000
AND C.DAILY_FEE * (100 - P.DISCOUNT_RATE) / 100 * 30 < 2000000
ORDER BY 3 DESC, 2, 1 DESC;