https://school.programmers.co.kr/learn/courses/30/lessons/157339
SELECT CAR.CAR_ID, CAR.CAR_TYPE, ROUND(CAR.DAILY_FEE * (1- 0.01 * DISCOUNT_RATE) * 30) AS FEE
FROM CAR_RENTAL_COMPANY_CAR CAR
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
ON CAR.CAR_TYPE = PLAN.CAR_TYPE
WHERE
CAR.CAR_ID NOT IN(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE >= '2022-11-01' AND START_DATE <='2022-11-30'
# 11월달에 대여되고 있는 CAR_ID는 제외
)
AND CAR.CAR_TYPE IN ('세단', 'SUV')
AND PLAN.DURATION_TYPE = '30일 이상'
GROUP BY CAR.CAR_ID
HAVING FEE BETWEEN 500000 AND 1990000
ORDER BY 3 DESC, 2, 1 DESC
11월 1일부터 11월 30일까지 대여를 하려면, 11월달에 어느 순간이라도 이미 대여가 되고 있는 차들을 제외시켜야 한다. 이게 어려웠다.
그런차들은 대여 시작일이 2022-11-30보다 같거나 빠르고 대여 종료일이 2022-11-01보다 같거나 큰 차들이다.
'DB' 카테고리의 다른 글
[MySQL] 프로그래머스 - 상품을 구매한 회원 비율 구하기(JOIN, DISTINCT) (0) | 2023.02.23 |
---|---|
[MySQL] 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.02.23 |
[MySQL] 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기(UNION ALL) (0) | 2023.02.21 |
[MySQL] 프로그래머스 - 자동차 대여 기록 별 대여 금액 구하기 (0) | 2023.02.14 |
[MySQL] 프로그래머스 - 취소되지 않은 진료 예약 조회하기(3개 테이블 JOIN) (0) | 2023.02.14 |