[프로그래머스_SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
📜문제Permalink
https://school.programmers.co.kr/learn/courses/30/lessons/157339
📜정답Permalink
SELECT A.CAR_ID,A.CAR_TYPE,
ROUND(A.DAILY_FEE*30 *(100-C.DISCOUNT_RATE)/100) AS FEE
FROM CAR_RENTAL_COMPANY_CAR A
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B ON A.CAR_ID = B.CAR_ID
INNER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN C ON A.CAR_TYPE = C.CAR_TYPE
WHERE A.CAR_ID NOT IN (
SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE<'2022-12-01' AND END_DATE>='2022-11-01')
AND C.CAR_TYPE IN('세단','SUV')
AND C.DURATION_TYPE LIKE '30%'
GROUP BY A.CAR_ID HAVING (FEE>=500000 AND FEE <2000000)
ORDER BY FEE DESC,CAR_TYPE ASC, CAR_ID DESC
📜풀이Permalink
조건 1.Permalink
2022년 11월 1일부터 2022년 11월 30일까지 대여 가능
NOT IN (
SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE<'2022-12-01' AND END_DATE>='2022-11-01'
)
시작일이 2022-12-01 전이면서 마감일이 2022-11-01 이후인 경우를 제외
조건 2.Permalink
자동차 종류가 '세단' 또는 'SUV' 인 자동차
C.CAR_TYPE IN('세단','SUV')
조건 3.Permalink
30일간의 대여 금액
C.DURATION_TYPE LIKE '30%'
📜노트Permalink
- 컬럼명 LIKE ‘%부분일치값%’
%
: ‘모든 문자’라는 의미로 글자수 제한이 없음
_
: ‘한 글자’라는 의미로 글자수 제한이 있음
그리하여 DURATION_TYPE LIKE '30%'
일때 ‘30’라는 문자열이 포함된 부분일치를 찾는 뜻이다.
패턴은 %
를 사용했으므로 ‘30’로 시작하는 대여 기간을 찾으며, 뒤로 몇자의 문자가 있는지는 상관이 없다.
만약 _
을 사용한 DURATION_TYPE LIKE '_30%'
라면 ‘30’이라는 문자열 앞에 1개의 문자가 있는 문자열을 찾게 된다.