코딩 테스트/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 별로 의 대여 여부를 파악 하게 만듬