본문 바로가기
TIL - 프로그래밍/SQL

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

by chaemj97 2023. 2. 24.
728x90

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

 

프로그래머스

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

programmers.co.kr


문제 조건

  1. 자동차 종류가 '세단' 또는 'SUV' 인 자동차
  2. 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능
  3. 30일간의 대여
  4. 대여 금액이 50만원 이상 200만원 미만인 자동차
  5. 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문
  6. 대여금액 내림차순, 자동차 종류 오름차순, 자동차 ID 내림차순
# 1. 
select *
from CAR_RENTAL_COMPANY_CAR as C
where C.car_type in ('세단','SUV');

# 1. + 3.
select *
from CAR_RENTAL_COMPANY_CAR as C join (select car_type,DISCOUNT_RATE 
                                       from CAR_RENTAL_COMPANY_DISCOUNT_PLAN 
                                       where DURATION_TYPE = '30일 이상') as P
on C.car_type = P.car_type

# 5. 대여금액 = 1일금액 * 30 * (100-할인율) / 100
select C.car_id, C.car_type, round(C.daily_fee*30*(100-P.discount_rate)/100) as FEE

# 6.
order by FEE desc, C.car_type, C.car_id desc;

# 2. 2022-11-1 ~ 2022-11-30 일 기간 내에 대여 중인 차 제외 
where c.CAR_ID not in (select CAR_ID
                       from CAR_RENTAL_COMPANY_RENTAL_HISTORY
                       where END_DATE > '2022-11-00'
                       and START_DATE < '2022-12-00')
                       
# 4. TABLE이 그룹 전체가 되는 경우 HAVING 단독 사용 가능
# 이 경우 WHERE을 쓰면 "Unknown column 'FEE' in 'where clause'"
having FEE >= 500000 and FEE <= 2000000

SELECT문에서 정의한 열을 WHERE절에서 사용할 수 없다. 대신 HAVING 사용 가능하다.

 

정답!!

select C.car_id, C.car_type, round(C.daily_fee*30*(100-P.discount_rate)/100) as FEE
from CAR_RENTAL_COMPANY_CAR as C join (select car_type,DISCOUNT_RATE 
                                       from CAR_RENTAL_COMPANY_DISCOUNT_PLAN 
                                       where DURATION_TYPE = '30일 이상') as P
on C.car_type = P.car_type
where c.CAR_ID not in (select CAR_ID
                       from CAR_RENTAL_COMPANY_RENTAL_HISTORY
                       where END_DATE > '2022-11-00'
                       and START_DATE < '2022-12-00')
and C.car_type in ('세단','SUV') 
having FEE >= 500000 and FEE <= 2000000
order by FEE desc, C.car_type, C.car_id desc;
728x90
반응형

댓글