[74] 부트캠프 TIL - 본캠프 55일차

2024. 11. 8. 22:36부트캠프 TIL

728x90

1. 프로그래머스 사용

1-1)  sql 문제 : 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
ㄴ 문제 : 아래 3개 테이블에서 자동차 종류가 세단또는 SUV인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여금액(컬럼명 FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.
 

문제풀이)

1) 문제를 읽고 필요한 조건들을 체크한다
- 자동차id, 자동차 종류, 대여금액을 구한다.
 
2) 자동차 종류 구하기
- 세단 또 SUV 차량 종류 CAR_RENTAL_COMPANY_CAR테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블을 이어주는 역할을 할 컬럼이다.(CAR_TYPE) JOIN으로 참조 후 조건에 넣어줘야한다.
 
3) 2022년 11월1일부터 2022년 11월30일까지 대여가능 체크
-  대여기록을 담은 테이블에서 시작일과 종료일 기준으로 11월1일 11월30일로 조건을 구한다.
 
4) 대여금액 50만원 이상 200만원 미만
-  대여금액의 조건으로 50만원이상 200만원 미만을 구한다.
 
5) 30일 이상 구하기
- 할인정책정보 테이블에서 대여기간 종류를 30일이상으로 조건을 구한다.
 
6) 최종 완성 쿼리문
-
SELECT * FROM
(
    SELECT a.CAR_ID ,a.CAR_TYPE ,ROUND((a.DAILY_FEE - (a.DAILY_FEE /100 * c.DISCOUNT_RATE)) * 30) AS FEE
    FROM CAR_RENTAL_COMPANY_CAR  a
    LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY b ON a.CAR_ID = b.CAR_ID 
    AND DATE_FORMAT(b.START_DATE, '%Y-%m-%d') <= '2022-11-30' 
    AND DATE_FORMAT(b.END_DATE, '%Y-%m-%d') >='2022-11-01'
    LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN c ON a.CAR_TYPE = c.CAR_TYPE AND c.DURATION_TYPE = '30일 이상'
    WHERE a.CAR_TYPE IN('SUV','세단')
    AND b.CAR_ID IS NULL
) a
WHERE a.FEE >= 500000 AND a.FEE < 2000000
ORDER BY a.FEE DESC, a.CAR_TYPE ASC,a.CAR_ID DESC

- 할인정책정보의 할인율과  일일 대여금액 그리고 30일로 대여금액을 먼저 계산하여 구한다.
(주의사항에서 FEE의 금액은 정수로 표현되어야하기때문에 ROUND()를 사용하여 반올림을 해준다. 이때 기준 숫자를 넣지않고 소수점을 없애준다.)
- 필요한 자동차ID, 자동차종류, 일일대여금액(FEE)를 젤먼저 조회조건으로 맞춘 후 아래에서 문제에서 요구한 조건들을 차근 적어나간다. 먼저 자동차id를 기준으로 자동차정보테이블과 자동차대여기록테이블을 이어준다.
- 이때 대여기록 테이블에서 시작일과 종료일을 문제에서 제시한 11월30일과 11월1일로 조건을 조회한다.
- 그 후 CAR_TYPE으로 자동차정보테이블과 할인정책정보테이블을 이어준다. 이때 대여일 종류에서 30일이상만 조회한다.
- 마지막으로 자동차 종류 SUV,세단을 조건에 넣어준다.
- 지금까지 구한 조건을 서브쿼리로 만들고 마지막 조건을 넣어준다
( 대여금액 조건 50만원이상 200만원미만을 구한다.)
- 대여금액 내림차순, 자동차종류 오름차순, 자동차ID내림차순 정렬을 해서 마무리한다.
 
 

2. Spring 2차 조별 프로젝트 정리

- 내용 추후 작성

728x90