728x90
반응형
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/157339
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 핵심
- temp
- 대여 가능한 car_id를 추출한다
- 그런데 car_id는 중복해서 나오게 되므로 car_id로 group by 진행하고 max 집계함수로 가장 최근 END_DATE를 가져온다.
- 그후 having문을 통해서 2022 보다 작거나 같고 10월보다 작거나 같은, 즉 대여기간에 대여할 수 있는 것을 필터링한다.
- temp2
- temp과 CAR_RENTAL_COMPANY_CAR를 inner join하여 대여가능한 car_id 중에서 car_type이 'SUV'와 '세단'인 것을 추출한다.
- temp3
- temp2와 CAR_RENTAL_COMPANY_DISCOUNT_PLAN을 inner join하는데 두 테이블은 car_type으로 조인하도록한다.
- 30일 이상 대여이므로 DURATION_TYPE = '30일 이상'으로 한 후에 계산한다.
- 할인된 금액은 DAYILY_FEE * 30 * (100 - DISCOUNT) / 100으로 하며 정수로 나와야 하기 때문에 round( ~, 0) 함수를 사용했다.
- 왜 100- DISCOUNT를 하냐면...DISCOUNT은 할인정도이다. 그리고 컬럼을 찍어보면 정수 8, 12 이렇게 나온다. 그렇기 때문에 저렇게 계산을 했다.
2. 코드(MySQL)
# 자동차의 종류 - 세단, suv
# 2022년 11월 1일 ~ 2022년 11월 30일까지 대여 가능
# 30일간의 대여금액이 50만원 이상, 200만원 미만만 출력!
# 대여금액 내림차순, 자동차 종류 오름차순, 자동차id 내림차순
# history에서 car_id 중복이 존재 > end_date가 가장 큰 것만 나오도록!
# temp - [2022-11-01 ~ 2022-11-30]에 대여가능한 CAR_ID 추출
# car_id가 중복된 존재..그래서 max집계 함수 사용해서 가장 최근 날짜만 추출
with temp as (
select CAR_ID, max(END_DATE) as END_DATE
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by CAR_ID
having year(max(END_DATE)) <= 2022 and month(max(END_DATE)) <= 10
),
# temp2 대여가능한 것 중에서 CAR_TYPE이 SUV와 세단인 CAR의 CAR_ID, TYPE, DAILY_FEE
temp2 as (
select T.CAR_ID, C.CAR_TYPE, C.DAILY_FEE
from temp T
inner join CAR_RENTAL_COMPANY_CAR C on T.CAR_ID = C.CAR_ID
where C.CAR_TYPE in ('SUV', '세단')
),
# temp3 대여가능한 SUV, 세단의 할인률을 구하기 위해서 join한 후에 계산
temp3 as (
select T2.CAR_ID, T2.CAR_TYPE,
round(T2.DAILY_FEE * 30 * (100 - P.DISCOUNT_RATE) / 100, 0) as FEE
from temp2 T2
inner join CAR_RENTAL_COMPANY_DISCOUNT_PLAN P on T2.CAR_TYPE = P.CAR_TYPE
where P.DURATION_TYPE = '30일 이상'
)
# 50만원 이상, 200만원 미만 출력
select CAR_ID, CAR_TYPE, FEE
from temp3
where FEE between 500000 and 1999999
order by FEE desc, CAR_TYPE asc, CAR_ID desc;
728x90
반응형
'PS > SQL' 카테고리의 다른 글
[SQL] 조건에 맞는 사용자 정보 조회하기 (1) | 2024.02.12 |
---|---|
[SQL] 자동차 평균 대여 기간 구하기 (0) | 2024.02.12 |
[SQL] 5월 식품들의 총매출 조회하기 (0) | 2024.02.11 |
[SQL] 주문량이 많은 아이스크림들 조회하기 (2) | 2024.02.10 |
[SQL] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.02.07 |