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

AMUD·2023년 6월 19일
0

My Database

목록 보기
10/13

문제


문제 링크

접근

  • 이 문제를 필요했던 기본 개념이 꽤 있다.
    • 문자열 처리 : REPLACE, SUBSTRING etc
    • 문자 <-> 숫자 형변환 : CAST
    • 연산 중 NULL 처리 : COALESCE
    • 소수점 자르기 : FLOOR
    • 서브쿼리, 조인, 정렬 etc
  • 논리적으로는 이상 ~ 이하의 표에서 필요한 값을 얻어오는 방법 (MAX연산을 통해 해결)을 살피면 좋을 것 같다.

풀이

SELECT HISTORY_ID, 
    FLOOR( COALESCE(
    (SELECT (100 - MAX(DISCOUNT_RATE)) / 100
    FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
    WHERE CAST(REPLACE(DURATION_TYPE, '일 이상', '') AS SIGNED) <= (DATEDIFF(H.END_DATE, H.START_DATE) + 1)
    AND CAR_TYPE = '트럭'), 1) * DAILY_FEE * (DATEDIFF(H.END_DATE, H.START_DATE) + 1)) AS FEE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H
JOIN CAR_RENTAL_COMPANY_CAR C ON H.CAR_ID = C.CAR_ID
WHERE CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글