less than 1 minute read

📜문제Permalink


https://school.programmers.co.kr/learn/courses/30/lessons/157339

image

📜정답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개의 문자가 있는 문자열을 찾게 된다.