Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

dearbeany

[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 본문

Oracle

[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

dearbeany 2024. 9. 8. 16:59

대여이력 리스트인디 (데이터있으면 못 빌리겠지)
대여가능 리스트로 테이블 잘못 생각함 ,^^;;;;;

-- 틀린 답,,
SELECT DISTINCT B.CAR_ID, A.CAR_TYPE, ROUND(B.DAILY_FEE*30*(100-A.DISCOUNT_RATE)/100) AS FEE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN A, (
        SELECT C.CAR_ID, C.CAR_TYPE, C.DAILY_FEE
        FROM CAR_RENTAL_COMPANY_CAR C, CAR_RENTAL_COMPANY_RENTAL_HISTORY R
        WHERE 1=1
        AND C.CAR_ID = R.CAR_ID
        AND C.CAR_TYPE IN ('세단', 'SUV')
        AND (TO_CHAR(R.START_DATE, 'YYYY-MM-DD') > '2022-11-30' OR TO_CHAR(R.END_DATE, 'YYYY-MM-DD') < '2022-11-01')
) B
WHERE A.CAR_TYPE = B.CAR_TYPE
AND A.DURATION_TYPE = '30일 이상'
AND B.DAILY_FEE*A.DISCOUNT_RATE BETWEEN 500000 AND 2000000
ORDER BY FEE DESC, CAR_TYPE ASC, CAR_ID DESC

 
11월 1일부터 30일까지 대여 가능한 차!!! 라는 조건은 내가 시작일 1일부터 30일 동안빌리겠다는 말이다
즉,  STARTDATE가 11월 30일보다 전에 시작되었거나 ENDDATE가 11월 1일보다 크면
해당 차는 11월 1일부터 30일까지 빌리는게 불가능함 !!
다시 말해서 2022년 11월 1일부터 30일까지 CAR_RENTAL_COMPANY_RENTAL_HISTORY에 어떠한 대여기록도 있으면 안 된다
 
그래서
2022-11-01 ~ 2022-11-30 기간에 겹쳐지는 대여기록이 있는 CAR_ID를 뽑아내서 전체에서 제외하기로 했다.
 
***그리하여 대여가 불가능한 차들을 뽑아내는 조건!!!!
STARTDATE <= 2022-11-30 AND END_DATE >= 2022-11-01
 
(부등호를 넣을지 말지 고민 많이했는데,, 결국엔 넣던 말던 둘 다 통과된다;
대여기록 2022-10-30~2022-11-01 있을 때, 대여시작일자 2022-11-01의 가능여부는 검증 안 하나보다.)

SELECT B.CAR_ID, B.CAR_TYPE, B.DAILY_FEE*30*(100-A.DISCOUNT_RATE)/100 AS FEE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN A,
(
        SELECT *
        FROM CAR_RENTAL_COMPANY_CAR
        WHERE CAR_TYPE IN ('세단', 'SUV')
        AND CAR_ID NOT IN (
                SELECT CAR_ID
                FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                WHERE TO_CHAR(END_DATE, 'YYYY-MM-DD') >= '2022-11-01' AND TO_CHAR(START_DATE, 'YYYY-MM-DD') <= '2022-11-30'
                ) 
) B
WHERE A.CAR_TYPE = B.CAR_TYPE
AND A.DURATION_TYPE = '30일 이상'
AND B.DAILY_FEE*30*(100-A.DISCOUNT_RATE)/100 BETWEEN 500000 AND 2000000
ORDER BY 3 DESC, 2, 1 DESC
;