[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기 오라클코드

mango·2023년 10월 14일

SQL

목록 보기
12/13

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.



😇 Things I learnt

- CASE WHEN 자유자재로..

  1. 7일 이하일때 DISCOUNT_RATE가 0프로로 주어지면 쉬우려만
    아예 데이터가 없을 때 나타내는 방법을 생각하기가 어려웠다.

  2. 그리고 CASE WHEN 다중 WHEN 문은, if else가 아니라는 점 기억하기!

case when (a.END_DATE-a.START_DATE+1) >= 7 then '7일%'
     when (a.END_DATE-a.START_DATE+1) >= 30 then '30일%'
     when (a.END_DATE-a.START_DATE+1) >= 90 then '90일%'
     else '7일%' end

여기서 31이 들어오면 두번째 when 절에 걸리는 것이 아니라,
첫번째 when 절에 걸려버림!!!





😇 쿼리

- (1차)


SELECT a.HISTORY_ID, 
case when a.END_DATE-a.START_DATE+1 >= 7 then b.DAILY_FEE*((100-c.DISCOUNT_RATE)/100)*(a.END_DATE-a.START_DATE+1)
else b.DAILY_FEE*(a.END_DATE-a.START_DATE+1) end "fee"
from  CAR_RENTAL_COMPANY_RENTAL_HISTORY a,
CAR_RENTAL_COMPANY_CAR b,
CAR_RENTAL_COMPANY_DISCOUNT_PLAN c
where a.CAR_ID = b.CAR_ID	
and b.CAR_TYPE = c.CAR_TYPE
and c.DURATION_TYPE LIKE 
    case when (a.END_DATE-a.START_DATE+1) BETWEEN 7 and 29 then '7일%'
         when (a.END_DATE-a.START_DATE+1) BETWEEN 30 and 89 then '30일%'
         when (a.END_DATE-a.START_DATE+1) >= 90 then '90일%'
         else '7일%' end
and b.CAR_TYPE = '트럭'
order by 2 desc, 1 desc
profile
The joy of knowing things

0개의 댓글