코딩테스트 연습 - 자동차 대여 기록 별 대여 금액 구하기
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/151141
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
CAR_RENTAL_COMPANY_CAR 자동차 종류, 대여비용 테이블
CAR_RENTAL_COMPANY_RENTAL_HISTORY 자동차 대여 기록 테이블
CAR_RENTAL_COMPANY_DISCOUNT_PLAN 할인정보 테이블
이 있다. 트럭을 대여한 기록을 구하여 할인을 적용하고 대여기간에 대한 비용을 구하면 된다.
eg. ) HISTORY_ID 5번을 보면 CAR_ID는 3번 하루 대여비용은 32000 대여기간은 30일 트럭30일 이상 대여시 7%할인
=> 비용 * 날짜 * 할인율
=> 32000 * 30 * 0.93 = 892,800
문제 풀이
생각 과정
DATEDIFF 함수를 이용하여 두 날짜의 차이를 구할 것이고
할인율 적용기간은 7일이상, 30일이상, 90일이상으로 고정으로 정해져있기 때문에
CASE WHEN THEN 구문을 이용하여 구할 것이다.
서브쿼리를 REPLACE 함수를 이용하여 다음과 같이 작성하였다.
SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE car_type = '트럭' AND REPLACE(duration_type,'일 이상','') = 7)
구현
SELECT
B.HISTORY_ID,
CASE
WHEN DATEDIFF(B.END_DATE, B.START_DATE) + 1 < 7
THEN A.DAILY_FEE * (DATEDIFF(B.END_DATE, B.START_DATE) + 1)
WHEN DATEDIFF(B.END_DATE, B.START_DATE) + 1 < 30
THEN ROUND(A.DAILY_FEE * (100 - (
SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE car_type = '트럭' AND REPLACE(duration_type, '일 이상', '') = 7
)) / 100 * (DATEDIFF(B.END_DATE, B.START_DATE)+ 1))
WHEN DATEDIFF(B.END_DATE, B.START_DATE) + 1 < 90
THEN ROUND(A.DAILY_FEE * (100 - (
SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE car_type = '트럭' AND REPLACE(duration_type, '일 이상', '') = 30
)) / 100 * (DATEDIFF(B.END_DATE, B.START_DATE)+ 1))
ELSE ROUND(A.DAILY_FEE * (100 - (
SELECT DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE car_type = '트럭' AND REPLACE(duration_type, '일 이상', '') = 90
)) / 100 * (DATEDIFF(B.END_DATE, B.START_DATE)+ 1))
END AS 'FEE'
FROM
CAR_RENTAL_COMPANY_CAR A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B ON A.CAR_ID = B.CAR_ID
WHERE A.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC;
'공부 일지 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 연도별 대장균 크기의 편차 구하기 (MySQL) (0) | 2024.11.26 |
---|---|
[프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL) (0) | 2024.11.25 |
[프로그래머스] 없어진 기록 찾기 (MySQL) (0) | 2023.12.04 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (MySQL) (1) | 2023.11.22 |
[프로그래머스] 서울에 위치한 식당 목록 출력하기(MySQL) (0) | 2023.11.21 |