https://school.programmers.co.kr/learn/courses/30/lessons/157339
🗒️SQL 코드 풀이
# 자동차 종류 : 세단 or SUV / 2022년 11월 1일 ~ 11월 30일 / 대여 금액 50만원 ~ 200만원
# 자동차 ID / 자동차 종류 / 대여 금액
# 대여 금액(FEE) 기준 내림차순 정렬 / 자동차 종류 오름차순 / 자동차 ID 내림차순
SELECT
C.CAR_ID,
C.CAR_TYPE,
ROUND(DAILY_FEE*30*((100-D_P.DISCOUNT_RATE)/100),0) FEE
FROM CAR_RENTAL_COMPANY_CAR C
LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY R_H
ON C.CAR_ID = R_H.CAR_ID
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN D_P
ON C.CAR_TYPE = D_P.CAR_TYPE
WHERE
C.CAR_ID NOT IN
(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE >= "2022-11-01" AND START_DATE <= "2022-11-30"
)
AND
(C.CAR_TYPE = "세단" OR C.CAR_TYPE = "SUV" )
AND
D_P.DURATION_TYPE = "30일 이상"
AND
ROUND(DAILY_FEE*30*((100-D_P.DISCOUNT_RATE)/100),0) > 500000
AND
ROUND(DAILY_FEE*30*((100-D_P.DISCOUNT_RATE)/100),0) < 2000000
GROUP BY C.CAR_ID
ORDER BY
FEE DESC, C.CAR_TYPE, C.CAR_ID DESC
1. 조건에 맞게 하나 하나 해결하면 된다 .
2. 맨 처음에 CAR_RENTAL_COMPANY_RENTAL_HISTORY, CAR_RENTAL_COMPANY_DISCOUNT_PLAN을 CAR_RENTAL_COMPANY_CAR를 기준으로 LEFT JOIN을 생각한다.
3. 이후 조건에 맞게 해결하면 되는데, 날짜 필터링 부분을 주의하자.
우리가 원하는 것은 2022년 11월 1일 ~ 11월 30일이 포함되지 않도록 하는 것이다.
4. 해당 조건에 맞게 하기위해 WHERE 절에 서브쿼리와 NOT IN을 사용해서 한다.
- NOT IN 이기 때문에, 반대로 2022년 11월 1일 ~ 11월 30일 범위를 SELECT
- END_DATE를 "2020-11-01" 로 설정하면 "2020-11-01"이 최소이자 시작점이 됨
- 그리고 START_DATE를 "2020-11-30" 까지 설정 하면 끝
📌 문제 코멘트
(R_H.START_DATE < "2022-11-01" OR R_H.START_DATE > "2022-12-01")
AND
(R_H.END_DATE < "2022-11-01" OR R_H.END_DATE >= "2022-12-01")
맨 처음에 이런식의 조건을 해서 계속 실패를 했다 .
C.CAR_ID NOT IN
(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE >= "2022-11-01" AND START_DATE <= "2022-11-30"
)
이런식의 방법이 더 편하고 효과적인 것 같으니 기억해주자.
해당 문제에서 꼭 기억하면 좋은 것들
- NOT IN 문법을 알아두자
- GROUP BY를 쓰면 SELECT * 을 할 수 없음
- 조건문에서도 저런식으로 서브 쿼리 사용이 가능함
📚문제
'♟️ 알고리즘 > 알고리즘_프로그래머스' 카테고리의 다른 글
[Python][프로그래머스] 가장 큰 수 / 정렬 (Lv2) (0) | 2025.02.21 |
---|---|
[Python][프로그래머스] 전화번호 목록 / 해시,정렬 (Lv2) (0) | 2025.02.21 |
[Python][프로그래머스] 프로세스 / 스택, (Lv2) (0) | 2025.02.18 |
[Python][프로그래머스] 주식 가격 / 스택 (Lv2) (0) | 2025.02.15 |
[Python][프로그래머스] 최대공약수와 최소공배수 (0) | 2024.05.16 |