부제:
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기, 레벨 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 활용해 추가
'SQL 알고리즘 코드카타' 카테고리의 다른 글
| SQL 알고리즘 코드카타 20일차(2) 26.01.18(일) (1) | 2026.01.18 |
|---|---|
| SQL 알고리즘 코드카타 20일차(1) 26.01.18(일) (0) | 2026.01.18 |
| SQL 알고리즘 코드카타 19일차(4) 26.01.17(토) (0) | 2026.01.17 |
| SQL 알고리즘 코드카타 19일차(3) 26.01.17(토) (0) | 2026.01.17 |
| SQL 알고리즘 코드카타 19일차(2) 26.01.17(토) (0) | 2026.01.17 |