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 라고 짓는다.
그후 테이블에서 데이터를 가져온다. 그후 가독성을 높이기위해 내림차순 정렬한다.
답변 코드 :

데이터 중복 속에서 현재 상태를 추출하는 문제여서 도움이 해결하면서 도움이 많이 되는 문제 였다.
'프로그래머스 SQL' 카테고리의 다른 글
| 6. 프로그래머스 SQL lv.3 ( 조건에 맞는 사용자와 총 거래금액 조회하기 ) (0) | 2026.05.08 |
|---|---|
| 5.프로그래머스 SQL lv2.5 (다양한 음식을 즐긴 미식가 찾기 ai생성문제) (0) | 2026.05.04 |
| 4.프로그래머스 SQL lv3 (조건에 맞는 사용자 정보 조회하기) (0) | 2026.05.03 |
| 3.프로그래머스 SQL lv2 (중복제거하기) (0) | 2026.05.03 |
| 2.프로그래머스 SQL lv2 (재구매가 일어난 상품과 회원 리스트 구하기) (0) | 2026.04.28 |