- 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를 기준으로 내림차순 정렬해주세요.
SELECT c.car_id
, c.car_type
, ROUND(c.daily_fee * 30 * (100-p.discount_rate)/100) FEE
FROM CAR_RENTAL_COMPANY_CAR c JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN p
ON c.car_type=p.car_type AND p.duration_type = '30일 이상'
WHERE c.car_type IN ('세단', 'SUV') AND 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')
GROUP BY 1
HAVING FEE >= 500000 AND FEE < 2000000
ORDER BY 3 DESC, 1, 2 DESC
① (SELECT car_id
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE end_date >= '2022-11-01' AND start_date <= '2022-11-30')
# 11월1일부터 30일동안 대여 이력이 있는 차량을 조회해준다.
# 반납일이 11월1일 포함, 2일~
# 대여시작일이 11월30일 포함, 29일~
② FROM CAR_RENTAL_COMPANY_CAR c JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN p
ON c.car_type=p.car_type AND p.duration_type = '30일 이상'
WHERE c.car_type IN ('세단', 'SUV') AND c.car_id NOT IN
# 30일간의 대여 가능하고, 대여 금액에 맞는 차량을 찾아야 하기 때문에
자동차 정보 테이블과 할인 정보 테이블을 조인해준다
# WHERE 조건에서 1번에서 찾은 대여 이력이 있는 차량을 제외한(NOT IN) 자동차 ID 를 지정해준다
# 대여 이력이 있을 경우 11월1일~30일 동안 대여가 불가능 하기 때문!
③ SELECT c.car_id
, c.car_type
, ROUND(c.daily_fee * 30 * (100-p.discount_rate)/100) FEE
# 문제에서 요구하는 컬럼을 셀렉해준다.
# 대여금액 = 일일 대여금액 * 30일 * (할인율)
④ GROUP BY 1
HAVING FEE >= 500000 AND FEE < 2000000
# car_id 를 그룹한 후 having 에서 대여금액 조건을 지정해준다.
대여기간 조건을 이해하기 어려워 시간이 걸렸던 문제이다.
다른 사람의 쿼리를 보고 풀게 되었는데
GROUP BY 없이 HAVING 을 써서 풀어도 풀이가 된다!
* GROUP BY 없이 단독으로 HAVING 이 오는 경우
테이블 전체가 한개의 그룹이 되는 경우
# 대여금액(FEE) 에 금액 조건이 필요한데 WHERE 절에서는 오류가 발생한다.
# 그룹화를 해도 되고, 안해도 됨
'SQL 코드카타' 카테고리의 다른 글
상품을 구매한 회원 비율 구하기 (0) | 2024.04.19 |
---|---|
자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.04.18 |
입양 시각 구하기(2) #WITH RECURSIVE , SET함수 (0) | 2024.04.11 |
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.04.09 |
헤비 유저가 소유한 장소 # where 절 서브쿼리 (0) | 2024.04.04 |