자동차 대여 기록 별 대여 금액 구하기

는는·2023년 4월 3일
1

SQL - 문제 풀이

목록 보기
59/77

자동차 대여 기록 별 대여 금액 구하기

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

3개의 테이블을 합쳐서 대여 기록 별로 대여 금액을 구하는 문제입니다.

일단 with절에서 2개의 테이블을 합친 후 CASE문을 이용해서 칼럼을 하나 만들어줍니다. 대여 종료일 - 대여 시작을 빼주고, 할인 정책 별로
구분해주고 트럭에 정보만 불러옵니다.

이제 다른 테이블의 정보를 가지고와서 합쳐줘야하는데요. 트럭에 대한 정보만 담긴 테이블 기준으로 LEFT 조인을 해줍니다. 이제
대여 기록 별 대여 금액을 구해야하는데요.

할인 없는 값은 일일 대여 요금 * 대여 날짜 값만 가져오면 되고,

할인이 적용이 되면, 요금에 할인율을 곱하고, 대여 날짜 값을 곱하면 대여 금액을 구할 수 있습니다.

구한 값을 내림차순으로 정렬, 자동차 대여 기록 ID 내림차순 정렬 해주면 정답입니다.

with DAY AS (
SELECT history_id,DAILY_FEE,car_type,start_date,end_date,
CASE WHEN (DATEDIFF(end_date,start_date) +1) BETWEEN 7 AND 29 THEN '7일 이상' 
WHEN (DATEDIFF(end_date,start_date) +1) BETWEEN 30 AND 89 THEN '30일 이상' 
WHEN (DATEDIFF(end_date,start_date) +1) >= 90 THEN '90일 이상' END DURATION_TYPE
FROM car_rental_company_car A join car_rental_company_rental_history B 
ON A.car_id = B.car_id
WHERE car_type = '트럭')

SELECT History_id,
CASE WHEN DISCOUNT_RATE IS null THEN daily_fee * (DATEDIFF(end_date,start_date) +1)
ELSE FLOOR(daily_fee * (100 - DISCOUNT_RATE)/100) * (DATEDIFF(end_date,start_date) +1) END FEE 
FROM DAY LEFT join car_rental_company_discount_plan C 
ON DAY.car_type = C.car_type AND DAY.duration_type = C.duration_type
ORDER BY FEE DESC, history_id DESC

0개의 댓글

관련 채용 정보