Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

복습로그

[프로그래머스 MySQL] 자동차 대여 기록 별 대여 금액 구하기 본문

SQL

[프로그래머스 MySQL] 자동차 대여 기록 별 대여 금액 구하기

hyejinny 2023. 3. 18. 15:49
728x90
 

프로그래머스

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

programmers.co.kr

문제

💡 CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요.

💡 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

 

예시

CAR_RENTAL_COMPANY_CAR 테이블
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블
CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블

대여 기간 별로 일일 대여 요금에 알맞은 할인율을 곱하여 금액을 구하면 다음과 같습니다.

 

풀이

SELECT HISTORY_ID, 
    CASE
        WHEN DATEDIFF(END_DATE, START_DATE)+1 < 7 THEN ROUND((DATEDIFF(END_DATE, START_DATE)+1) * DAILY_FEE)
        WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 7 AND DATEDIFF(END_DATE, START_DATE)+1 <= 29 THEN ROUND(DAILY_FEE*(DATEDIFF(END_DATE, START_DATE)+1)*0.95)
        WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 30 AND DATEDIFF(END_DATE, START_DATE)+1 <= 89 THEN ROUND(DAILY_FEE*(DATEDIFF(END_DATE, START_DATE)+1)*0.92)
        WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 90 THEN ROUND(DAILY_FEE*(DATEDIFF(END_DATE, START_DATE)+1)*0.85)
    END AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS CAR INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS HISTORY ON CAR.CAR_ID = HISTORY.CAR_ID INNER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS PLAN ON CAR.CAR_TYPE = PLAN.CAR_TYPE
WHERE PLAN.CAR_TYPE = "트럭"
GROUP BY HISTORY_ID
ORDER BY FEE DESC, HISTORY_ID DESC

ORDER BY DAILY_FEE DESC 가 아니라 ORDER BY FEE DESC 로 적어야 한다..!