-
[String, Date] 자동차 대여 기록 별 대여 금액 구하기 (Oracle)💻 하나씩 차곡차곡/프로그래머스 (SQL) 2023. 6. 29. 12:33728x90320x100
WITH HIST AS ( SELECT B.HISTORY_ID AS HISTORY_ID , A.CAR_ID AS CAR_ID , A.CAR_TYPE AS CAR_TYPE , A.DAILY_FEE AS DAILY_FEE , B.DURATION AS DURATION , CASE WHEN B.DURATION < 7 THEN '' ELSE CASE WHEN B.DURATION < 30 THEN '7일 이상' ELSE CASE WHEN B.DURATION < 90 THEN '30일 이상' ELSE '90일 이상' END END END AS DURATION_TYPE FROM CAR_RENTAL_COMPANY_CAR A , (SELECT HISTORY_ID , CAR_ID , END_DATE - START_DATE + 1 AS duration FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) B WHERE 1 = 1 AND A.CAR_ID = B.CAR_ID AND A.CAR_TYPE = '트럭') SELECT H.HISTORY_ID , H.DAILY_FEE * H.DURATION * (100 - NVL(A.DISCOUNT_RATE, 0)) / 100 AS FEE FROM HIST H , CAR_RENTAL_COMPANY_DISCOUNT_PLAN A WHERE H.CAR_TYPE = A.CAR_TYPE(+) AND H.DURATION_TYPE = A.DURATION_TYPE(+) ORDER BY H.DAILY_FEE * H.DURATION * (100 - NVL(A.DISCOUNT_RATE, 0)) / 100 desc, H.HISTORY_ID desc
-- 임시 테이블 쓰지 않고 최대한 해보려다가 결국 임시테이블 사용하였고, 다른 분의 답안을 참고하였다. 나중에 좀 더 천천히 봐야 겠음. (출처 : https://school.programmers.co.kr/questions/42339)
-- 날짜 계산할 때는 항상 +1 하는 것 잊지 말기.
-- 할인 퍼센트 관련 계산할 때 원금 * (100 - (할인비율 / 100)) 계산 법 잊지 말기.
728x90320x100'💻 하나씩 차곡차곡 > 프로그래머스 (SQL)' 카테고리의 다른 글
[SQL/Oracle] WHERE 1 = 1 사용하는 이유, 사용하지 말아야 하는 이유 (0) 2024.01.31 [String, Date] 취소되지 않은 진료 예약 조회하기 (Oracle) (0) 2023.06.30 [String, Date] 대여 기록이 존재하는 자동차 리스트 구하기 (Oracle) (0) 2023.06.28 [String, Date] 조건별로 분류하여 주문상태 출력하기 (Oracle) (0) 2023.06.27 [String, Date] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (Oracle) (0) 2023.06.27