https://school.programmers.co.kr/learn/courses/30/lessons/151141
WITH TRUCK AS(
SELECT HISTORY.HISTORY_ID, CAR.DAILY_FEE, (DATEDIFF(END_DATE, START_DATE)+1) DAYS,
CASE
WHEN(DATEDIFF(END_DATE, START_DATE)+1) >= 90 THEN '90일 이상'
WHEN(DATEDIFF(END_DATE, START_DATE)+1) >= 30 THEN '30일 이상'
WHEN(DATEDIFF(END_DATE, START_DATE)+1) >= 7 THEN '7일 이상'
END DURATION_TYPE
FROM CAR_RENTAL_COMPANY_CAR CAR
LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY HISTORY
ON CAR.CAR_ID = HISTORY.CAR_ID
WHERE CAR.CAR_TYPE = '트럭'
)
SELECT TRUCK.HISTORY_ID, ROUND((TRUCK.DAILY_FEE * (1.0 - IFNULL(PLAN.DISCOUNT_RATE * 0.01, 0))) * TRUCK.DAYS, 0) FEE
FROM TRUCK
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
ON TRUCK.DURATION_TYPE = PLAN.DURATION_TYPE AND PLAN.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC
자동차 정보 테이블과 대여 기록 정보 테이블을 CAR_ID로 조인해 TRUCK 테이블을 뽑는다. 이 때 대여시작일과 대여종료일의 차이에 따라 DURATION_TYPE을 나눠서 출력한다.
그리고 이 TRUCK 테이블과 할인정책정보 테이블을 조인한다. 이 때 주의해야할 점이 같은 DURATION_TYPE과 CAR_TYPE이 트럭인 것들끼리 조인해야한다.
'DB' 카테고리의 다른 글
[MySQL] 프로그래머스 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2023.02.22 |
---|---|
[MySQL] 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기(UNION ALL) (0) | 2023.02.21 |
[MySQL] 프로그래머스 - 취소되지 않은 진료 예약 조회하기(3개 테이블 JOIN) (0) | 2023.02.14 |
[MySQL] 프로그래머스 - 자동차 평균 대여 기간 구하기 (0) | 2023.02.13 |
[MySQL] 프로그래머스 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기(IF, 날짜 비교) (0) | 2023.02.10 |