[업무 지식]/MySQL
자동차 대여 기록 별 대여 금액 구하기
에디터 윤슬
2024. 10. 21. 11:38
링크
https://school.programmers.co.kr/learn/courses/30/lessons/151141
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
정답
select history_id,
round(daily_fee * (datediff(end_date, start_date) + 1) * (100 - ifnull(discount_rate, 0)) /
100, 0) fee
from (
select *,
case when datediff(end_date + 1, start_date) < 7 then null
when datediff(end_date + 1, start_date) < 30 then '7일 이상'
when datediff(end_date + 1, start_date) < 90 then '30일 이상'
else '90일 이상'
end as duration_date
from car_rental_company_rental_history
) a
join car_rental_company_car b
on a.car_id = b.car_id
left join car_rental_company_discount_plan c
on c.car_type = b.car_type and c.duration_type = a.duration_date
where b.car_type = '트럭'
order by 2 desc, 1 desc
해설
- 우선 실제 차량 대여 기간이 discount_plan과 동일한 컬럼을 만든다.
- 일일 대여금액과 실제 차량 대여 기간이 한 테이블에 있도록 조인한다.
- 할인 비율이 한 테이블에 있도록 다시 조인한다. 이때 자동차 타입과 대여 기간이 같아야 한다.
새롭게 이해한 내용
- 최종 구하고자 하는 값을 구하려면 최종 테이블의 형태가 어떠해야 하는지 머릿속으로 그린다.
- 그 결과가 나오도록 쿼리를 구상한다.