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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

오답에 따른 답지 참조

SELECT 
    C.CAR_ID, 
    C.CAR_TYPE, 
    FLOOR(C.DAILY_FEE * 30 * (100 - P.DISCOUNT_RATE) / 100) AS FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P
    ON C.CAR_TYPE = P.CAR_TYPE
    AND P.DURATION_TYPE = '30일 이상'          -- ← 30일 대여 할인율
WHERE C.CAR_TYPE IN ('세단', 'SUV')
  AND C.CAR_ID NOT IN (
      SELECT CAR_ID
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
      WHERE START_DATE <= '2022-11-30'         -- ← 기간 겹침 조건
        AND END_DATE >= '2022-11-01'
  )
HAVING FEE >= 500000 AND FEE < 2000000
ORDER BY FEE DESC, CAR_TYPE ASC, C.CAR_ID DESC;

 

 

다시하기

 

오답 코드

-- 코드를 입력하세요
# Rental_company_car에서 suv , 세단 선택, 히스토리테이블 조인해서
# 히스토리테이블에 없거나, 있어도 start_date ~ end_date에 end_date가 11월 1일 이전 또는 start_Date11월 30 이후 인 날짜만 선택
# 30일 간 대여하니, DAILYFEE * 30 * 기간 타입에 따른 DISCOUNT_RATE  곱하면 됨

SELECT CH.CAR_ID, CH.CAR_TYPE, DAILY_FEE * 30 * ((100-P.DISCOUNT_RATE)/100) AS FEE FROM 
(SELECT C.CAR_ID, C.CAR_TYPE, C.DAILY_FEE, H.START_DATE, H.END_DATE from CAR_RENTAL_COMPANY_CAR AS C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H
ON C.CAR_ID = H.CAR_ID
WHERE C.CAR_ID NOT IN( SELECT C.CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                    WHERE START_DATE <= '2022-11-30' AND END_DATE >= '2022-11-01')
 AND (CAR_TYPE = '세단' OR CAR_TYPE = 'SUV')
) AS CH
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P
ON CH.CAR_TYPE = P.CAR_TYPE
GROUP BY CAR_ID
ORDER BY FEE DESC, CAR_TYPE ASC, CH.CAR_ID DESC;

'프로그래머스 > 코딩테스트' 카테고리의 다른 글

lv3 ) 야근 지수  (0) 2026.05.27
lv2) 올바른괄호 []  (0) 2026.05.27
lv2) 영어 끝말잇기  (0) 2026.05.26
lv2) 스킬트리 []  (0) 2026.05.26
lv2) 요격시스템  (0) 2026.05.25

+ Recent posts