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

2024. 7. 11. 21:19· 알고리즘/SQL
728x90
 

프로그래머스

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

programmers.co.kr

 

WITH 절을 이용해 서브쿼리를 2개 만든 후 풀었다.

 

1. 트럭의 대여 기간 타입과 해당하는 할인율을 갖고 있는 테이블 TRUCK_DISCOUNT_PLAN

2. 트럭 대여기록 ID, 트럭 대여 기간 타입, 일일 요금, 빌린 날 수를 갖고 있는 테이블 TRUCK_RENTAL_HISTORY

 

TRUCK_RENTAL_HISTORY와 TRUCK_DISCOUNT_PLAN을 트럭 대여 기간 타입으로 LEFT OUTER JOIN한다. (트럭 대여기간 타입이 NULL인 경우에는 할인이 안 들어가게 하려고)

 

주의 해야 할 점은, 

대여 시작 날짜 ~ 대여 종료 날짜 사이의 차를 통해 대여한 날수를 구할 때, DATEDIFF를 사용한 후 1을 더하는 방식으로 구해야 한다는 것이다.

예를 들어 8월 1일에 대여를 시작해 8월 3일에 대여를 종료했다면 3일 동안 대여 한 것이지만, DATEDIFF를 통해 계산하면 2가 나오므로 1을 더해준다.

 

-- 코드를 입력하세요
# 트럭의 대여 기간 종류, 할인률
WITH TRUCK_DISCOUNT_PLAN AS 
(
    SELECT DURATION_TYPE, DISCOUNT_RATE
    FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
    WHERE CAR_TYPE = "트럭"
),
# 트럭 대여 기록 ID, 트럭 대여 기간 타입, 일일 요금, 빌린 날 수
TRUCK_RENTAL_HISTORY AS 
(
        SELECT HISTORY_ID, 
        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 NULL
        END AS DURATION_TYPE,
    TRUCK_INFO.DAILY_FEE, DATEDIFF(END_DATE, START_DATE) + 1 AS DAYS
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY JOIN 
    (
        SELECT CAR_ID, DAILY_FEE
        FROM CAR_RENTAL_COMPANY_CAR
        WHERE CAR_TYPE = "트럭"
    ) TRUCK_INFO USING(CAR_ID)
)



SELECT HISTORY_ID,
    CASE
    WHEN DISCOUNT_RATE IS NULL THEN ROUND(DAILY_FEE * DAYS)
    ELSE ROUND(DAILY_FEE * DAYS * (1 - DISCOUNT_RATE / 100))
    END AS FEE
FROM TRUCK_RENTAL_HISTORY LEFT OUTER JOIN TRUCK_DISCOUNT_PLAN USING(DURATION_TYPE)
ORDER BY FEE DESC, HISTORY_ID DESC

 

 

 

728x90

'알고리즘 > SQL' 카테고리의 다른 글

[프로그래머스] FrontEnd 개발자 찾기  (0) 2024.07.18
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기  (0) 2024.07.16
[프로그래머스] 특정 세대의 대장균 찾기  (0) 2024.07.09
[프로그래머스] 입양 시각 구하기(2)  (0) 2024.07.08
[프로그래머스] 우유와 요거트가 담긴 장바구니  (0) 2024.07.01
'알고리즘/SQL' 카테고리의 다른 글
  • [프로그래머스] FrontEnd 개발자 찾기
  • [프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
  • [프로그래머스] 특정 세대의 대장균 찾기
  • [프로그래머스] 입양 시각 구하기(2)
happenundo
happenundo
happenundo
2023~ 개발블로그
happenundo
전체
오늘
어제
  • 분류 전체보기 (207)
    • TIL (3)
    • 알고리즘 (188)
      • 프로그래머스 (47)
      • 백준 (69)
      • 파이썬 문법 (11)
      • 이것이 코딩테스트다 (46)
      • 알고리즘 노트 (6)
      • SQL (8)
    • Spring (4)
      • Spring 입문 (2)
      • 개인 프로젝트 (1)
      • 인텔리제이 (1)
    • CS (8)
      • DB (2)
      • 네트워크 (1)
      • 그외 (5)
    • ~2022 (1)
    • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • 프로그래머스
  • 알고리즘
  • BFS
  • 괄호변환
  • CS
  • 재귀
  • dfs
  • deepcopy
  • 이것이코딩테스트다
  • 플로이드워셜
  • 다이나믹프로그래밍
  • distinct
  • 파이썬
  • sql
  • 동적프로그래밍
  • 완전탐색
  • 이진탐색
  • 다익스트라
  • BinarySearch
  • 백트래킹
  • 최단거리
  • DP
  • 구현
  • 백준
  • 큐
  • 그리디
  • 스택
  • 이코테
  • 우선순위큐

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
happenundo
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.