코딩 테스트/SQL

[프로그래머스 - LEVEL 3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 ⛔️

macbook2 2026. 3. 26. 15:34

https://school.programmers.co.kr/learn/courses/30/lessons/157340

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제

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

풀이 - 1 

count 사용

SELECT car_id,
       CASE
           WHEN COUNT(
               CASE
                   WHEN '2022-10-16' BETWEEN start_date AND end_date
                   THEN 1
               END
           ) > 0
           THEN '대여중'
           ELSE '대여 가능'
       END AS availability
FROM car_rental_company_rental_history
GROUP BY car_id
ORDER BY car_id DESC;

 

car_id 가 중복되어 나오므로 GROUP BY 를 통해 집계, count 함수를 사용하여  '2022-10-16' 사이에 start_date, end_date가 존재 시  대여중, 아닐시  대여 가능으로 표시

 

풀이 - 2

exists 사용

SELECT DISTINCT car_id,
       CASE
           WHEN EXISTS (
               SELECT 1
               FROM car_rental_company_rental_history h2
               WHERE h2.car_id = h1.car_id
                 AND '2022-10-16' BETWEEN h2.start_date AND h2.end_date
           )
           THEN '대여중'
           ELSE '대여 가능'
       END AS availability
FROM car_rental_company_rental_history h1
ORDER BY car_id DESC;

 

 EXISTS 함수 사용, 서브 쿼리를 사용하여 car_id 별로 의 대여 여부를 파악 하게 만듬