부제:
자동차 대여 기록에서 장기/단기 대여 구분하기, 레벨 4
1. 문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/151138
2. 정답 코드:
SELECT
history_id,
car_id,
date_format(start_date, '%Y-%m-%d') as start_date,
date_format(end_date, '%Y-%m-%d') as end_date,
case
when datediff(end_date,start_date)+1 >= 30 then '장기 대여'
else '단기 대여'
end as rent_type
FROM car_rental_company_rental_history
where start_date like ("2022-09%")
order by history_id desc;
3. 오류 상황:
SELECT
history_id,
car_id,
date_format(start_date, '%Y-%m-%d') as start_date,
date_format(end_date, '%Y-%m-%d') as end_date,
case
when datediff(end_date,start_date) >= 30 then '장기 대여'
else '단기 대여'
end as rent_type
FROM car_rental_company_rental_history
where start_date like ("2022-09%")
order by history_id desc;
=> 날짜 차이 계산 오류
=> 날짜 필터링
4. 시도 방법:
=> 날짜 차이 계산할 때 +1 추가
=> 날짜 필터링 여러 방법 존재
5. 최종 문제 해결 방법:
=> 9월 1일에 빌려서 9월 1일에 바로 반납했다면 당일 대여이므로 대여 기간은 1일이다. 하지만 DATEDIFF('2022-09-01', '2022-09-01')의 결과는 0이 나온다. 즉, 문제에서 말하는 대여 기간을 정확히 계산하려면 DATEDIFF 결과에 1을 더해줘야 실제 대여 일수가 계산된다.
=> like "2022-09%" 방식도 좋다. 다만, start_date가 문자열이 아닌 DATE 타입일 경우, 성능이나 가독성을 위해 아래와 같은 방법들도 사용 가능.
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09''SQL 알고리즘 코드카타' 카테고리의 다른 글
| SQL 알고리즘 코드카타 20일차(5) 26.01.18(일) (0) | 2026.01.18 |
|---|---|
| SQL 알고리즘 코드카타 20일차(4) 26.01.18(일) (0) | 2026.01.18 |
| SQL 알고리즘 코드카타 20일차(2) 26.01.18(일) (1) | 2026.01.18 |
| SQL 알고리즘 코드카타 20일차(1) 26.01.18(일) (0) | 2026.01.18 |
| SQL 알고리즘 코드카타 19일차(5) 26.01.17(토) (0) | 2026.01.17 |