하루에 하나씩 공부하기
특정 기간 동안 대여 가능한 자동차들의 대여비용 구하기-LV4 (재도전) 본문
- 문제
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를 기준으로 내림차순 정렬해주세요.
코딩테스트 연습 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 | 프로그래머스 스쿨
- 키포인트
'7일 이상', '30일 이상'의 내용이 담긴 컬럼을 어떻게 처리해야 할까?
2022-11-01 부터 2022-11-30 까지 사용가능한 차량 필터링 - 잘못함
<결론>
1. 딱 30일 빌리는 거니깐 처리할 필요가 없었음
2. 날짜 필터링을 엉터리로 함
WHERE C.CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE < '2022-11-01' OR START_DATE > '2022-11-30'
) AND P.DURATION_TYPE like '30%'
GROUP BY C.CAR_ID
HAVING C.CAR_TYPE IN ('세단', 'SUV')
AND (FEE >= 500000 AND FEE < 2000000)
이렇게 접근하니까
START_DATE<=11-30 이고 END_DATE>=11-01 인 대우 컬럼 못찾음
> 이렇게 하면 절대 안됨!
- 코드
SELECT C.CAR_ID, C.CAR_TYPE,
ROUND(30*C.DAILY_FEE*0.01*(100-P.DISCOUNT_RATE),0) AS FEE
FROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID=H.CAR_ID JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P ON C.CAR_TYPE=P.CAR_TYPE
WHERE P.DURATION_TYPE LIKE '30%' AND C.CAR_TYPE IN ('SUV','세단')
AND C.CAR_ID NOT IN
(SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE<='2022-11-30' AND END_DATE>='2022-11-01')
GROUP BY C.CAR_ID
HAVING FEE BETWEEN 500000 AND 2000000
ORDER BY FEE DESC, C.CAR_TYPE ASC, C.CAR_ID DESC;
SELECT C.CAR_ID, C.CAR_TYPE,
ROUND(C.DAILY_FEE * (100 - P.DISCOUNT_RATE)/100*30,0) AS FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P ON C.CAR_TYPE = P.CAR_TYPE
WHERE C.CAR_TYPE IN ('세단','SUV')
AND P.DURATION_TYPE ='30일 이상'
GROUP BY C.CAR_ID
HAVING (MAX(END_DATE) < '2022-11-01') AND FEE BETWEEN 500000 AND 2000000
ORDER BY FEE DESC, C.CAR_TYPE ASC, C.CAR_ID DESC;
CAR_ID로 그룹바이 후 MAX(END_DATE) < 2022-11-01를 필터링하면 더 쉽게 코드 작성 가능
'SQL 코딩테스트 > LV4' 카테고리의 다른 글
저자 별 카테고리 별 매출액 집계하기-LV4 (0) | 2025.01.22 |
---|---|
자동차 대여 기록 별 대여 금액 구하기-LV4 (재도전) (0) | 2025.01.21 |
Front End 개발자 찾기-LV4 (0) | 2025.01.17 |
언어별 개발자 분류하기-LV4 (0) | 2025.01.17 |
연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기-LV4 (0) | 2025.01.17 |