728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
서브 쿼리와 NOT IN을 활용해서 푸는 문제.
까다로웠던 점은 2022-11-01 ~ 2011-11-30까지 대여 가능한 자동차를 구분해내는 작업이었다.
SELECT CAR_ID
FROM SELECTED_CAR JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY USING(CAR_ID)
WHERE (START_DATE < '2022-11-01' AND END_DATE >= '2022-11-01') OR
(START_DATE >= '2022-11-01')
GROUP BY CAR_ID
이 쿼리를 통해 대여 시작 날짜가 2022-11-01보다 작고 대여 마무리 날짜가 2022-11-01이상인 경우 / 그리고 대여 시작날짜가 2022-11-01이상인 경우의 CAR_ID만 뽑아내면 이 테이블에는 2022-11-01 ~ 2022-11-30까지 대여 불가능한 자동차의 CAR_ID만 남는다.
이 테이블을 NOT IN 문을 사용해 2022-11-01 ~ 2022-11-30까지 대여가 가능한 자동차를 뽑아낼 수 있다.
풀이 코드
-- 코드를 입력하세요
WITH SELECTED_CAR AS (
SELECT CAR_ID, CAR_TYPE, DAILY_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE IN ('세단', 'SUV')
), DISCOUNT_RATE_SELECTED_CAR AS (
SELECT CAR_TYPE, DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE DURATION_TYPE = '30일 이상' AND CAR_TYPE IN ('세단', 'SUV')
)
SELECT CAR_ID, CAR_TYPE, ROUND((DAILY_FEE * 30) * (1 - DISCOUNT_RATE / 100)) AS FEE
FROM SELECTED_CAR JOIN DISCOUNT_RATE_SELECTED_CAR USING(CAR_TYPE)
WHERE CAR_ID NOT IN (SELECT CAR_ID
FROM SELECTED_CAR JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY USING(CAR_ID)
WHERE (START_DATE < '2022-11-01' AND END_DATE >= '2022-11-01') OR
(START_DATE >= '2022-11-01')
GROUP BY CAR_ID) AND ROUND((DAILY_FEE * 30) * (1 - DISCOUNT_RATE / 100)) >= 500000 AND ROUND((DAILY_FEE * 30) * (1 - DISCOUNT_RATE / 100)) < 2000000
ORDER BY FEE DESC, CAR_TYPE, CAR_ID DESC
SELECTED_CAR: 차 종류가 세단, SUV인 경우를 조회하는 테이블
DISCOUNT_RATE_SELECTED_CAR: 대여 기간 종류가 30일 이상이고 차 종류가 세단, SUV인 경우의 차 종류, 할인율을 조회하는 테이블
728x90
'알고리즘 > SQL' 카테고리의 다른 글
상품을 구매한 회원 비율 구하기 (0) | 2024.07.23 |
---|---|
[프로그래머스] FrontEnd 개발자 찾기 (0) | 2024.07.18 |
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.07.11 |
[프로그래머스] 특정 세대의 대장균 찾기 (0) | 2024.07.09 |
[프로그래머스] 입양 시각 구하기(2) (0) | 2024.07.08 |