반응형
https://school.programmers.co.kr/learn/courses/30/lessons/157339
3개의 table을 종합적으로 사용하는 문제였다.
우선 정답 코드
-- 코드를 입력하세요
SELECT A.CAR_ID, A.CAR_TYPE
, ROUND((DAILY_FEE * 30 * ((100 - C.DISCOUNT_RATE) / 100)), 0) AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS A
# JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS B
# ON A.CAR_ID = B.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS C
ON A.CAR_TYPE = C.CAR_TYPE
WHERE A.CAR_TYPE IN ('세단', 'SUV')
AND A.CAR_ID NOT IN (
SELECT B2.CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY AS B2
WHERE (('2022-11-01' <= END_DATE AND '2022-11-30' >= END_DATE)
OR ('2022-11-01' <= START_DATE AND '2022-11-30' >= START_DATE))
OR ('2022-11-01' > START_DATE AND '2022-11-30' < END_DATE)
)
AND C.DURATION_TYPE = '30일 이상'
GROUP BY A.CAR_ID
HAVING 500000 <= FEE AND FEE < 2000000
ORDER BY 3 DESC, 2 ASC, 1 DESC
조건을 하나씩 뜯어보면서 하면 된다.
- CAR_TYPE 이 세단, SUV
- 2022-11-01~2022-11-30 사이에 대여가 가능한 차량
- 대여금액이 50만 원 이상 200만 원 미만
우선 1번 조건은 어렵지 않다.
2번 조건은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블을 서브쿼리로 만들어서
11월이 포함되는 모든 날짜
11월 이전에 시작해서 11월 이후에 시작하는 모든 날짜
위 두가지를 포함하지 않는 CAR_ID를 NOT IN 으로 받아서 뽑았다.
3번 조건은 어차피 GROUP BY CAR_ID를 할 경우 CAR_ID는 하나씩만 존재하기 때문에
SELECT 절에서 만들어 놓은 FEE 컬럼을 HAVING 을 사용해서 필터를 걸어준다.
반응형
'DB > MySQL' 카테고리의 다른 글
[프로그래머스] MySQL - 오랜 기간 보호한 동물(2) (0) | 2023.11.24 |
---|---|
[프로그래머스] MySQL - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (1) | 2023.11.24 |
[Mysql] 별칭(alias) 정렬 (0) | 2023.09.15 |
[Mysql] 조건문 CASE~ WHEN~ THEN~ 알아보기 (0) | 2023.09.15 |
Join 알아보기 (0) | 2023.09.12 |
댓글