프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
핵심
11월에 렌탈이 가능하려면?
렌탈 기록에서 시작일이 12월 1일 0시 전이면서 동시에 종료일이 11월 1일 0시이거나 그 후면 대여 기간이 11월에 겹친다.
그렇다면 이러한 기록이 있는 차는 모두 대상에서 빼야한다.
나는 WHERE 조건절에 NOT IN, Subquery를 사용하여 이를 처리하였다.
WHERE CAR_ID NOT IN(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE < '2022-12-01 00:00:00' AND END_DATE >= '2022-11-01 00:00:00'
)
Code
SELECT
C.CAR_ID,
C.CAR_TYPE,
C.DAILY_FEE * 30 * (100 - P.DISCOUNT_RATE) DIV 100 AS FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H
USING (CAR_ID)
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P
USING (CAR_TYPE)
WHERE CAR_TYPE IN ('세단', 'SUV')
AND DURATION_TYPE = '30일 이상'
AND CAR_ID NOT IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE <= '2022-11-30 23:59:59' AND END_DATE >= '2022-11-01 00:00:00'
)
GROUP BY
CAR_ID
HAVING
FEE >= 500000 AND
FEE < 2000000
ORDER BY
FEE DESC,
CAR_TYPE ASC,
CAR_ID DESC
728x90
반응형
'CS > SQL Problem' 카테고리의 다른 글
[Programmers] GROUP BY > 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.08.05 |
---|---|
[Programmers] 서울에 위치한 식당 목록 출력하기 (0) | 2024.07.10 |
[Programmers] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2024.07.08 |
[Programmers] JOIN > 있었는데요 없었습니다 (0) | 2024.07.07 |
[Programmers] JOIN > 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2024.07.04 |