SQL Coding Test/[Programmers]

[Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (Lv.3)

duswn1204 2026. 5. 26. 22:59

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/157340

🖥️ 문제 풀이

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

💡 문제 해결

SELECT 안에 서브쿼리 쓴 이유

자동차별 상태를 새로운 컬럼으로 만들어야 함

SELECT
    CAR_ID,
    CASE
        WHEN ...
        THEN '대여중'
        ELSE '대여 가능'
    END AS AVAILABILITY
 

처럼 SELECT에서 새 컬럼을 생성

 

이때 조건 판단에 필요한 것
: "현재 CAR_ID가 2022-10-16에 대여 중인 자동차인가?"

 

이걸 확인하기 위해 서브쿼리 사용:

SELECT CAR_ID
FROM ...
WHERE START_DATE <= '2022-10-16'
AND END_DATE >= '2022-10-16'
 

 

 
 

실행 흐름

대여중인 자동차 ID 목록 생성

현재 CAR_ID가 그 목록에 있는지 확인

있으면 '대여중', 없으면 '대여 가능'

AVAILABILITY 컬럼 생성
 

필터링 목적이 아니라 새로운 값을 만들어 출력하기 위해 SELECT 안에 서브쿼리 사용