[SQL 문제 풀기] 자동차 대여 기록 별 대여 금액 구하기(151141)

lhs's avatar
Mar 04, 2025
[SQL 문제 풀기] 자동차 대여 기록 별 대여 금액 구하기(151141)
 

1. 문제 풀이 아이디어

  • WITH 절을 사용하여 CAR_RENTAL_COMPANY_RENTAL_HISTORYCAR_RENTAL_COMPANY_CAR를 조인해 트럭 대여 정보를 가져온다.
  • CAR_RENTAL_COMPANY_DISCOUNT_PLAN에서 트럭 할인 정보를 추출하고 대여 일수에 해당하는 최소 할인율을 찾아 적용한 후, 총 대여 요금을 계산하여 문제를 해결한다.

2. 나의 정답 코드

WITH TRUCK AS ( SELECT HISTORY_ID, DAILY_FEE, DATEDIFF(END_DATE, START_DATE) + 1 RENTAL_DAYS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY JOIN CAR_RENTAL_COMPANY_CAR USING(CAR_ID) WHERE CAR_TYPE = '트럭' ), PLAN AS ( SELECT SUBSTRING_INDEX(DURATION_TYPE, '일', 1) DURATION, (100 - DISCOUNT_RATE) / 100 DISCOUNT FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE CAR_TYPE = '트럭' ) SELECT HISTORY_ID, ROUND( RENTAL_DAYS * DAILY_FEE * IFNULL((SELECT MIN(DISCOUNT) FROM PLAN WHERE RENTAL_DAYS >= DURATION), 1) ) FEE FROM TRUCK ORDER BY FEE DESC, HISTORY_ID DESC;

3. 정리

  • TRUCK 서브쿼리에서 트럭 대여 정보를 추출한다.
  • PLAN 서브쿼리에서 할인율 정보를 가져온다.
  • SELECT 절에서 RENTAL_DAYSDAILY_FEE를 곱한 후, 해당하는 최소 할인율을 적용하여 총 요금을 계산한다.
  • ORDER BY를 사용해 총 요금 기준 내림차순 정렬 후, 동일한 요금일 경우 HISTORY_ID 기준 내림차순 정렬한다.
Share article

LHS's Study Space