SQL 알고리즘 코드카타

SQL 알고리즘 코드카타 19일차(5) 26.01.17(토)

nom_de_plume 2026. 1. 17. 14:24

부제:

자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기, 레벨 4

 

1. 문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/157340
2. 정답 코드: 

SELECT
    car_id,
    MAX(CASE WHEN '2022-10-16' between start_date and end_date THEN '대여중' ELSE '대여 가능' END) as availability
from car_rental_company_rental_history
group by car_id
order by car_id desc


3. 오류 상황:

SELECT
    car_id,
    case
        when end_date <= '2022-10-16' then '대여중'
        when end_date > '2022-10-16' then '대여 가능'
    end as availability
from car_rental_company_rental_history
order by car_id desc

=> 그룹화 누락

=> 날짜 범위 오류

 

4. 시도 방법:

=> 그룹화

=> 날짜 범위 수정


5. 최종 문제 해결 방법:

=> 오류 코드는  각 대여 기록 하나하나에 대해 상태를 표시하지만, 문제는 각 자동차(CAR_ID)별로 최종 상태가 무엇인지를 묻고 있음. GROUP BY car_id를 사용하여 자동차별로 결과를 하나씩만 나오게 묶어줌.

=> 2022년 10월 16일에 대여 중이라는 것은, 대여 시작일(start_date)은 10월 16일 이전(또는 당일)이고, 반납일(end_date)은 10월 16일 이후(또는 당일)여야 함. 2022-10-16이 start_date와 end_date 사이에 있는지 확인하는 조건을 BETWEEN 활용해 추가