데이터 분석

흐름을 읽고
인사이트를 만든다.

1.프로그래머스 SQL lv.3 (자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기)

2026. 4. 27. 22:00프로그래머스 SQL

문제 설명

다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.

 

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

 

문제 해결 사고 과정

1. 문제의 핵심

특정 날짜 기준에 대여 여부를 판단하는 문제지만 한 자동차(CAR_ID)에 대한 대여기록이 여러 줄이다.

예를 들어서 1번 자동차가 9월에 한번 대여하고 반납 후 , 10월에 현재 대여중인 기록이 동시에 있다면 CASE WHEN  단순 조건문만 쓰면 '대여가능' 과 '대여중'이 두줄로 출력된다.

2.해결방안

2022년 10월 16일에 차가 대여중이여야한다 -> BETWEEN 함수를 이용해 시작일과 종료일(당일포함)해서 체크 가능하다. CAR_ID에 기록이 여러 개니까 GROUP BY CAR_ID 로 그룹화를 해준다.

그 후 현재 대여중인 CAR_ID 목록을 먼저 뽑고, IN 으로 체크해준다. -> 서브쿼리 안에 CAR_ID가 명단에 들어있다면 대여중

그렇지 않다면 '대여 가능' 이 출력되도록 else 문을 사용하고, 이 결과가 담긴 컬럼이름을  AVAILABILITY 라고 짓는다.

그후 테이블에서 데이터를 가져온다. 그후 가독성을 높이기위해 내림차순 정렬한다.

 

 

답변 코드 :

 

데이터 중복 속에서 현재 상태를 추출하는 문제여서 도움이 해결하면서 도움이 많이 되는 문제 였다.