[SQL] 자동차 대여 기록에서 장기/단기 대여 구분하기

Ray·2025년 3월 5일

SQL

목록 보기
11/39

🔎 문제설명

  • 출처: 프로그래머스
  • 사용언어(RDBMS): SQL(MySQL)
  • 문제:

    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;



🚀 풀이기록

문제를 풀 때, 분명히 쿼리문을 작성했고, 결과도 제대로 나왔던 것 같은데 틀렸다고 나와서 어디서 틀렸는지를 파악하는 것부터가 고민되었다. 내가 기존에 작성한 쿼리에서 두 가지 문제점을 발견했다.

1. 날짜 연산을 할 때 DATEDIFF() 를 사용하지 않고 - 연산을 사용했다.

GPT에게 물어보니, MySQL에서 날짜 데이터를 연산할 때, - 연산은 자동변환되어 숫자로 계산되지만 정확한 일수를 계산주지 않는다고 했다. 실제로

SELECT  DATE('2025-02-05') - DATE('2025-01-01') AS result;

와 같은 코드는 두 날짜의 차이가 35일이 아닌 숫자 20250205 - 20250101의 값인 104를 반환했다. 때문에 정확한 비교를 위해 DATEDIFF() 로 사용해야 한다고 했다.


2. 당일 대여를 0일로 생각하고 단순하게 >=30 를 사용해 RENT_TYPE 컬럼을 생성했다.

이 부분은 문제풀 때 미처 생각하지 못한 부분인데, 스터디 같이하시는 분께서 말씀해주셔서 알 수있었다.

profile
미래의 독자인 나를 위해 글을 씁니다.

0개의 댓글