문제
코드
WITH DURATION AS(SELECT HISTORY_ID, CAR_ID, (DATEDIFF(END_DATE, START_DATE)+1)AS DIFFDAY,
(CASE
WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 90 THEN '90일 이상'
WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 30 THEN '30일 이상'
WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 7 THEN '7일 이상'
ELSE '할인 없음' END) AS DURATION_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY), DISCOUNT AS (SELECT CAR_TYPE, DURATION_TYPE, DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE CAR_TYPE = '트럭')
SELECT D.HISTORY_ID, (CASE
WHEN D.DURATION_TYPE = '할인 없음' THEN FLOOR(C.DAILY_FEE * DIFFDAY)
ELSE FLOOR((1-(0.01*DIS.DISCOUNT_RATE)) * (C.DAILY_FEE * DIFFDAY))
END) AS FEE
FROM DURATION D LEFT JOIN CAR_RENTAL_COMPANY_CAR C ON D.CAR_ID = C.CAR_ID
LEFT JOIN DISCOUNT DIS ON DIS.DURATION_TYPE = D.DURATION_TYPE
WHERE C.CAR_TYPE = '트럭'
ORDER BY FEE DESC, D.HISTORY_ID DESC
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/courses/30/lessons/151141
'코딩테스트연습 > SQL_프로그래머스' 카테고리의 다른 글
특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (1) | 2025.06.25 |
---|---|
FrontEnd 개발자 찾기 (0) | 2025.06.24 |
특정 세대의 대장균 찾기 (0) | 2025.06.20 |
입양 시각 구하기(2) (0) | 2025.06.19 |
오프라인/온라인 판매 데이터 통합하기 (0) | 2025.06.18 |