728x90
반응형
[level 4] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 - 157339
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/157339)
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

💻 문제 정의
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.
💡 핵심 SQL문
- 서브쿼리 : END_DATE와 START_DATE가 11월 달 내에 존재하는지, 즉 11월달에 대여가 가능한 지를 판별한다. 판별 후 해당 쿼리의 결과를 제외한(NOT EXISTS) 나머지 행들을 결과로 반환한다.
- HAVING : FEE 컬럼은 SELECT 절에서 집계 함수로써 사용되어 반환된 결과이다. 해당 집계 함수는 GROUP BY 이후 수행되기 때문에 해당 집계 함수에 조건을 주기 위해서 HAVING 절에 조건문을 작성한다. FEE가 50만 이상 200만 이하인 경우로 필터링한다.
🗒️ 최종 제출 코드
SELECT C.CAR_ID, C.CAR_TYPE, FLOOR((100-DP.DISCOUNT_RATE)/100 * C.DAILY_FEE*30) AS FEE FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY RH ON C.CAR_ID = RH.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN DP ON C.CAR_TYPE = DP.CAR_TYPE
WHERE DP.DURATION_TYPE='30일 이상'
AND NOT EXISTS (
SELECT 1
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY RH2
WHERE RH2.CAR_ID = C.CAR_ID
AND RH2.END_DATE > '2022-11-01'
AND RH2.START_DATE < '2022-12-01'
) AND C.CAR_TYPE IN ('세단', 'SUV')
GROUP BY C.CAR_ID
HAVING (FEE >= 500000 AND FEE < 2000000)
ORDER BY FEE DESC, CAR_TYPE ASC, CAR_ID DESC
728x90
반응형
'Coding-Test > 프로그래머스' 카테고리의 다른 글
| [Python] 비밀 코드 해독 (0) | 2026.03.04 |
|---|---|
| [SQL] 저자 별 카테고리 별 매출액 집계하기 (0) | 2026.03.03 |
| [SQL] 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.02 |
| [SQL] 오프라인/온라인 판매 데이터 통합하기 (0) | 2026.03.02 |
| [Python] Level 2 - 큰 수 만들기 (0) | 2025.09.18 |