미식가의 개발 일기

[프로그래머스/MySQL] 자동차 대여 기록에서 장기/단기 대여 구분하기 본문

SQL

[프로그래머스/MySQL] 자동차 대여 기록에서 장기/단기 대여 구분하기

대체불가 핫걸 2025. 4. 19. 21:51

문제 

  • 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(RENT_TYPE)을 추가하여 대여기록을 출력
  • 대여 기록 ID를 기준으로 내림차순 정렬
  • TART_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일하게 처리 

 

해결 방법

  • 데이트 포맷 설정(2025-04-19 형태) → `DATE_FORMAT(target_date, '%Y-%m-%d')`
  • RENT_TYPE 컬럼 추가 → CASE문으로 조건 지정, DATEDIFF를 사용해 두 날짜의 차분을 구한 후 30 이상이면 장기 대여, 아니면 단기 대여로 표기(차분은 두 날짜의 간격을 구하므로 시작 날짜는 계산에 포함하지 않는다. 따라서 차분 값에 +1을 해줘야 한다.)
  • 대여 시작일이 2022년 9월에 속하는 데이터만 가져오기 → `WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'`
  • HISTORY_ID 기준 내림차순 정렬 → `ORDER BY HISTORY_ID DESC`

 

정답

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 BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC
반응형