[MySQL] Programmers (Lv4) 자동차 렌탈 기록별 렌탈 금액 입수

렌터카 기록별 대여금액 입수

Lv4에서 정답률 44%로 정답률이 가장 낮은 문제

* 주의사항 : FEE의 경우 예시와 같이 정수 부분만 출력해야 한다. ★Point1 : 자동차 종류가 트럭 차량 대여 기록 ★Point2 : 대여 기록별 대여 금액 문제 해설

렌탈 기록 정보에는 자동차 유형에 대한 칼럼인 CAR_TYPE이 없기 때문에 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_CAR 테이블을 결합하고 나서 조건문에서 트랙인 자동차만 조회했다. (Point1 해결)

각 대여 기록별로 대여 기간을 알아봤다.주의해야 할 점은 DATEDIFF 함수를 쓰고 나서 1을 더하는 것이다.

이후 대여 기간별로 대여 기간 유형을 구했다. (DURATION_TYPE) 할인 정책 테이블과 결합하기 위해 7일 이상, 30일 이상, 90일 이상으로 구분했다.7일 미만은 NULL값으로 했다.

할인 정책에 맞는 요금을 계산하기 위해 상기 쿼리를 서브 쿼리로 할인 정책 테이블과 조인 결합하고, 중요한 점은 상기 쿼리에서 렌탈 기간이 7일 미만인 렌탈 요금도 요구해야 하므로 추출할 데이터가 누락되지 않도록 LEFT OUTER JOIN을 해야 한다.또, JOIN 조건도 중요하다.자동차 유형별로 할인율이 다르기 때문에 자동차 유형도 고려해야 한다.

그리고 할인율을 고려한 대여료를 손에 넣었다.※ 방금 컬럼명을 ‘대여기간’으로 한 것을 PERIOD로 바꾸었다.정수로 출력하기 위해 FLOOR 함수를 사용하였다. DURATION_TYPE을 기준으로 각각 요금을 구분하여 계산하고 DURATION_TYPE이 없는 경우에는 그대로 일일 대여요금에 대여기간을 곱한다. (Point2 해결) 마지막으로 ORDER BY 절로 정렬하면 된다.

그리고 할인율을 고려한 대여료를 손에 넣었다.※ 방금 컬럼명을 ‘대여기간’으로 한 것을 PERIOD로 바꾸었다.정수로 출력하기 위해 FLOOR 함수를 사용하였다. DURATION_TYPE을 기준으로 각각 요금을 구분하여 계산하고 DURATION_TYPE이 없는 경우에는 그대로 일일 대여요금에 대여기간을 곱한다. (Point2 해결) 마지막으로 ORDER BY 절로 정렬하면 된다.

 

error: Content is protected !!