[69] 부트캠프 TIL - 본캠프 50일차

2024. 11. 1. 20:24부트캠프 TIL

728x90

1. 프로그래머스 사용

1-1)  sql 문제 : 자동차 대여기록에서 대여중/대여가능 여부 구분하기

ㄴ 문제 : 자동차 대여 기록 정보 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중'으로 표시하고 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼 'AVAILABILITY'으로 표시하고 자동차id와 AVAILABILITY를 출력해주세요. 이때 반납 날짜가 10월16일인 경우에도 대여중으로 표시해주시고 결과는 자동차 id를 기준으로 내림차순 정렬해주세요.

 

문제풀이)

1) 문제를 읽고 필요한 조건들을 체크한다

- 대여중 대여가능여부 조건을 담은 지정컬럼명, 자동차id를 조회

 

2) 2022년 10월 16일 기준 데이터

- 해당 날짜 기준으로 대여중 대여가능 여부를 구해야하는데 case when then으로 처리해야한다.

3) 자동차 id기준 내림차순

- order by desc를 활용해야함.

 

4) 최종 완성 쿼리문

-

SELECT 
    CAR_ID,
    MAX(CASE WHEN 
    DATE_FORMAT(START_DATE, '%Y-%m-%d') <= '2022-10-16' 
    AND DATE_FORMAT(END_DATE, '%Y-%m-%d') >= '2022-10-16' THEN '대여중'
    ELSE '대여 가능' END) AS 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

 

- CASE WHEN을 사용해서 2022-10-16일 기준으로 대여중과 대여가능을 구한다.

- 이때 대여중은 대여시작일이 10월 16일 이전이고, 대여종료일이 10월 16일 이후여야한다.

- 대여가능은 대여가 이미 종료되어야하기 때문에 대여종료일이 10월 16일 이전이어야한다.

- 같은 자동차가 여러번 대여 기록이 남아있는 경우가 있기때문에 GROUP BY로 자동차 id를 그룹화 시켜줘야한다.

- 그리고 case when에서 구한 조건을 MAX()로 최대값을 구하여 가장 최근의 대여기록을 구해와줘야한다.
※ MAX()로 구해오지 않으면 이미 대여가 끝난 기록들을 불러오는 위험이 있다.

 

2. Spring 2차 조별 프로젝트 시작

※ 추후 정리 예정

728x90