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

Sonar0·2023년 2월 10일
0

특정 기간동안 대여 가능한 자동차들의 대여비용 구하기


발상

  • 11/1 부터 11/30일까지 대여 불가능한 차량 ID를 추출한다.

    • 빌린 날짜가 11/1 - 11/30 사이 +
    • 반납 날짜가 11/1 - 11/30 사이 +
    • 빌린 날짜가 11/1 이전이면서 반납 날짜가 11/30 이후인 경우
  • 차종이 세단이거나 SUV인 차량의 ID 중 11/1 - 11/30 대여 불가능한 차량 ID에 속하지 않는 차량의 ID를 추출한다.

    • 세단 or SUV +
    • 11/1 - 11/30 대여 가능
  • 11/1 - 11/30 대여 가능 + (세단 or SUV) 중에서 30일 대여 금액이 50만원에서 200만원인 차량 ID만을 추출한다.

HOW

# 세단 or SUV + 11/1 - 11/30 대여 가능 + 30일 대여 금액 50 - 200
# CAR_ID, CAR_TYPE , FEE(대여 금액)
# FEE desc , CAR_TYPE asc , CAR_ID desc

# 30일 대여 금액 50 - 200 CAR_ID
select a.CAR_ID , a.CAR_TYPE ,round(DAILY_FEE * 30 * (100-DISCOUNT_RATE)/100) as 'FEE'  #, DAILY_FEE, b.DURATION_TYPE , DISCOUNT_RATE ,
from CAR_RENTAL_COMPANY_CAR a right join CAR_RENTAL_COMPANY_DISCOUNT_PLAN b
on a.CAR_TYPE = b.CAR_TYPE
where DURATION_TYPE = '30일 이상' and DAILY_FEE * 30 * (100-DISCOUNT_RATE)/100 between 500000 and 2000000
and CAR_ID in
(	
	# CAR_TYPE = 세단 or SUV
    select CAR_ID
    from CAR_RENTAL_COMPANY_CAR
    where CAR_TYPE in ('세단','SUV') and
    CAR_ID not in
    ( 
    # 11/1 - 11/30 대여 불가능 CAR_ID
    SELECT CAR_ID
    from CAR_RENTAL_COMPANY_RENTAL_HISTORY
    where DATE_FORMAT(START_DATE,'%y%m%d') between '221101' and '221130'
    or DATE_FORMAT(END_DATE,'%y%m%d') between '221101' and '221130'
    or (DATE_FORMAT(START_DATE,'%y%m%d') < '221101' and DATE_FORMAT(END_DATE,'%y%m%d') > '221130')
    )
)
order by 3 desc , 2 asc , 1 desc
profile
초보 개발자

0개의 댓글

관련 채용 정보