CAR_RENTAL_COMPANY_RENTAL_HISTORY테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
# 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서
# 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가
# 결과는 대여 기록 ID를 기준으로 내림차순 정렬
SELECT *, IF(DATEDIFF(END_DATE, START_DATE) >= 29, '장기 대여', '단기 대여') AS RENT_TYPE
FROM (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
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) AS CAR
WHERE CAR.START_DATE LIKE '2022-09%'
ORDER BY CAR.HISTORY_ID DESC;
문제를 풀 때, 분명히 쿼리문을 작성했고, 결과도 제대로 나왔던 것 같은데 틀렸다고 나와서 어디서 틀렸는지를 파악하는 것부터가 고민되었다. 내가 기존에 작성한 쿼리에서 두 가지 문제점을 발견했다.
DATEDIFF() 를 사용하지 않고 - 연산을 사용했다.GPT에게 물어보니, MySQL에서 날짜 데이터를 연산할 때, - 연산은 자동변환되어 숫자로 계산되지만 정확한 일수를 계산주지 않는다고 했다. 실제로
SELECT DATE('2025-02-05') - DATE('2025-01-01') AS result;
와 같은 코드는 두 날짜의 차이가 35일이 아닌 숫자 20250205 - 20250101의 값인 104를 반환했다. 때문에 정확한 비교를 위해 DATEDIFF() 로 사용해야 한다고 했다.
>=30 를 사용해 RENT_TYPE 컬럼을 생성했다.이 부분은 문제풀 때 미처 생각하지 못한 부분인데, 스터디 같이하시는 분께서 말씀해주셔서 알 수있었다.