Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

데이터 분석

프로그래머스 - 자동차 대여 기록 별 대여 금액 구하기 (WITH) 본문

SQL/프로그래머스 코딩

프로그래머스 - 자동차 대여 기록 별 대여 금액 구하기 (WITH)

시니조 2023. 3. 2. 23:30
  • WITH
  • CASE
  • NVL
  • JOIN

 

 

 

코드가 길어져서 중간까지 과정을 WITH를 통해 쿼리를 따로 만들어 두려한다.

WITH DUR AS (
SELECT CAR.DAILY_FEE, CAR.CAR_TYPE, HIS.HISTORY_ID, 
    END_DATE - START_DATE + 1 PERIOD,
    CASE 
        WHEN END_DATE - START_DATE + 1 >= 90 THEN '90일 이상'
        WHEN END_DATE - START_DATE + 1 >= 30 THEN '30일 이상'
        WHEN END_DATE - START_DATE + 1 >= 7 THEN '7일 이상'
        ELSE '' END AS DURATION_TYPE
FROM CAR_RENTAL_COMPANY_CAR CAR JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY HIS
    ON CAR.CAR_ID = HIS.CAR_ID
WHERE CAR.CAR_TYPE = '트럭'
)

우선 대여 기간별 해당기간에 맞게 구분해준다. 실행하면

 

다음과 같은 DUR라는 쿼리가 나온다.

 

이제 새로 만들어진 DUR의 CAR_TYPE과 DURANTION_TYPE을 PLAN테이블의 CAR_TYPE과 DURANTION_TYPE를 JOIN으로 연동해주면 된다.

 

SELECT DUR.HISTORY_ID, 
    ROUND(DUR.DAILY_FEE * DUR.PERIOD * (100 - NVL(PLAN.DISCOUNT_RATE,0)) / 100) AS FEE
FROM DUR LEFT OUTER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
    ON DUR.DURATION_TYPE = PLAN.DURATION_TYPE
    AND DUR.CAR_TYPE = PLAN.CAR_TYPE 
ORDER BY FEE DESC, HISTORY_ID DESC
;

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/151141?language=oracle 

 

프로그래머스

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

programmers.co.kr