inblog logo
|
LHS's Study Space
    SQL문제풀기

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

    lhs's avatar
    lhs
    Mar 04, 2025
    [SQL 문제 풀기] 자동차 대여 기록 별 대여 금액 구하기(151141)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/151141
     

    1. 문제 풀이 아이디어

    • WITH 절을 사용하여 CAR_RENTAL_COMPANY_RENTAL_HISTORY와 CAR_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_DAYS와 DAILY_FEE를 곱한 후, 해당하는 최소 할인율을 적용하여 총 요금을 계산한다.
    • ORDER BY를 사용해 총 요금 기준 내림차순 정렬 후, 동일한 요금일 경우 HISTORY_ID 기준 내림차순 정렬한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog