프로그래머스 SQL 고득점 킷 자동차 대여 기록 별 대여 금액 구하기

hysss·2023년 2월 20일
0

String, Date - 자동차 대여 기록 별 대여 금액 구하기

문제 분석

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서
자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서
대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여
대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요.
결과는 대여 금액을 기준으로 내림차순 정렬하고,
대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

코드

SELECT H.HISTORY_ID, ROUND((DATEDIFF(H.END_DATE, H.START_DATE)+1) * C.DAILY_FEE * (
                                            CASE WHEN DATEDIFF(H.END_DATE, H.START_DATE)+1 < 7 THEN 1
                                                 WHEN DATEDIFF(H.END_DATE, H.START_DATE)+1 < 30 THEN 0.95
                                                 WHEN DATEDIFF(H.END_DATE, H.START_DATE)+1 < 90 THEN 0.92
                                                 ELSE 0.85 END)) as FEE
FROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID=H.CAR_ID
     JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN D ON C.CAR_TYPE=D.CAR_TYPE
WHERE C.CAR_TYPE = '트럭'
GROUP BY HISTORY_ID
ORDER BY FEE DESC, H.HISTORY_ID DESC

문제 풀이

DATEDIFF() 함수를 이용해서 두 날짜 사이의 일 수를 계산하는 문제였다.
주의할 점은 총 몇일간 대여했는지 구해야 하기 때문에 1을 더해야 한다는 것이다.
(ex: START_DATE = 2023-02-20, END_DATE = 2023-02-20일 때, DATEDIFF(END_DATE, START_DATE) = 0 인데 하루를 빌렸으므로 1이 정답)

  • 날짜, 시간 계산 함수
    • DATEDIFF(A, B): 두 날짜 사이의 일 수 계산
      • YYYY-MM-DD 또는 YYYY-MM-DD HH:MM:SS[.FRACTION] 형식으로 값 지정
    • TIMEDIFF(A, B): 두 기간 사이의 시간 계산
      • YYYY-MM-DD 또는 YYYY-MM-DD HH:MM:SS[.FRACTION] 형식으로 값 지정
    • PERIOD_DIFF(A, B): 두 기간 사이의 개월 수 계산
      • YYYYMM 또는 YYMM 형식으로 값 지정
    • TIMESTAMPDIFF(YEAR 또는 MONTH 또는 등등, A, B): 두 기간 사이의 시간 계산
      • 첫 번째 인자로 원하는 반환값을 지정하고, A와 B 사이의 시간 계산

참고

MySQL 날짜, 시간 계산 DATEDIFF, TIMEDIFF 사용 방법

profile
매일 매일 규칙적으로

0개의 댓글