728x90
https://school.programmers.co.kr/learn/courses/30/lessons/151141
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
버릇이 없지만 쉬운 편인 sql 문제들
그래도 좀 난이도가 있는 편이라 길어졌다 3개의 테이블이 연관되어 있어서 n-1 번 즉 2번의 조인을 하고 조인 내부에서는 서브 쿼리 써서 필요한 값을 뽑는 과정들이 복잡하다 윈도우 함수를 몰랐으면 더 복잡해졌을 거 같은데 sqld가 이런 도움을 주다니 나머지는 운명에 맡기겠다
SELECT b.HISTORY_ID,(b.END_DATE-b.START_DATE+1)*(a.DAILY_FEE*(100-nvl(c.DISCOUNT_RATE,0))/100) FEE
from CAR_RENTAL_COMPANY_CAR a right outer join
CAR_RENTAL_COMPANY_RENTAL_HISTORY b
on (a.CAR_ID=b.CAR_ID)
left outer join
(select
substr(DURATION_TYPE,0,instr(DURATION_TYPE,'일')-1) q,
substr(lead(DURATION_TYPE,1,'1000일') over(partition by CAR_TYPE order by DISCOUNT_RATE),0,instr(lead(DURATION_TYPE,1,'1000일') over(partition by CAR_TYPE order by DISCOUNT_RATE),'일')-1) w
,DISCOUNT_RATE
from CAR_RENTAL_COMPANY_DISCOUNT_PLAN
where car_type='트럭') c
on(b.END_DATE-b.START_DATE+1>=c.q and b.END_DATE-b.START_DATE+1<c.w)
where a.CAR_TYPE='트럭'
order by FEE desc,b.HISTORY_ID desc
댓글