[SQL 고득점 Kit] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

썹스·2024년 3월 24일

❓ 문제

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.

❗️ 문제 풀이

/*
조건1 : 자동차 종류가 '세단' 또는 'SUV' 인 자동차
조건2 : 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능 (30일 full 대여)
조건3 : 대여 금액이 50만원 이상 200만원 미만
*/

with tb as(
    select 
        CAR_ID
    from CAR_RENTAL_COMPANY_RENTAL_HISTORY
    where 1=1
        and (START_DATE <= '2022-11-01' and END_DATE >= '2022-11-01')    # 대여 기간이 30일 미만 + 11월 이전 대여 ~ 11월 이후 반납
)

select 
    C.CAR_ID
    ,C.CAR_TYPE
    ,round((C.DAILY_FEE - (C.DAILY_FEE * (P.DISCOUNT_RATE * 0.01))) * 30, 0) as FEE
from CAR_RENTAL_COMPANY_CAR as C, CAR_RENTAL_COMPANY_DISCOUNT_PLAN as P
where 1=1
    and C.CAR_TYPE = P.CAR_TYPE
    and C.CAR_ID not in (select CAR_ID from tb)
    and P.DURATION_TYPE = '30일 이상'
    and C.CAR_TYPE in ('세단', 'SUV')
    and round((C.DAILY_FEE - (C.DAILY_FEE * (P.DISCOUNT_RATE * 0.01))) * 30, 0)  between 500000 and 1999999
order by 3 desc, 2, 1 desc

📚 느낀점

날짜 데이터를 다루는 데 있어 어색한 부분이 있었다.
이번 기회를 통해 SQL에서 날짜 데이터를 다루는 방법을 공부해야겠다.



🔗 Reference

https://school.programmers.co.kr/learn/courses/30/lessons/157339

profile
코린이

0개의 댓글