본문 바로가기

CS/SQL Problem

[Programmers] JOIN > 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

핵심

11월에 렌탈이 가능하려면?

렌탈 기록에서 시작일이 12월 1일 0시 전이면서 동시에 종료일이 11월 1일 0시이거나 그 후면 대여 기간이 11월에 겹친다.

그렇다면 이러한 기록이 있는 차는 모두 대상에서 빼야한다.

나는 WHERE 조건절에 NOT IN, Subquery를 사용하여 이를 처리하였다.

WHERE CAR_ID NOT IN(
        SELECT CAR_ID 
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
        WHERE START_DATE < '2022-12-01 00:00:00' AND END_DATE >= '2022-11-01 00:00:00'
    )

 

 

Code

SELECT
	C.CAR_ID, 
	C.CAR_TYPE, 
	C.DAILY_FEE * 30 * (100 - P.DISCOUNT_RATE) DIV 100 AS FEE
FROM CAR_RENTAL_COMPANY_CAR C

JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H 
USING (CAR_ID)

JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P 
USING (CAR_TYPE)

WHERE CAR_TYPE IN ('세단', 'SUV') 
AND DURATION_TYPE = '30일 이상'
AND CAR_ID NOT IN (
        SELECT CAR_ID 
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
        WHERE START_DATE <= '2022-11-30 23:59:59' AND END_DATE >= '2022-11-01 00:00:00'
    )
    
GROUP BY 
	CAR_ID
HAVING
	FEE >= 500000 AND 
	FEE < 2000000
ORDER BY 
	FEE DESC, 
	CAR_TYPE ASC, 
	CAR_ID DESC
728x90
반응형