[프로그래머스] 자동차 대여 기록에서 장기/단기 대여 구분하기 - SQL / Lv.1

ByungJik_Oh·2025년 9월 14일
0

[Programmers - SQL]

목록 보기
25/39
post-thumbnail

💡 문제

다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.

Column nameTypeNullable
HISTORY_IDINTEGERFALSE
CAR_IDINTEGERFALSE
START_DATEDATEFALSE
END_DATEDATEFALSE

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.


💭 접근

대여 시작일과 종료일의 차이가 30을 기준으로 단기 대여, 장기 대여 여부를 나누는 새로운 컬럼을 추가하는 문제이다.

이때 날짜의 차이는 DATEDIFF() 함수를 사용하여 구할 수 있는데, 이때 DATEDIFF() 함수는 종료일을 포함하지 않으므로 이 값에 +1을 해주어서 장기/단기를 구분해주어야 한다.

또한, 30일을 기준으로 장기/단기를 나눌 때는 CASE WHEN 절을 사용하여 나눌 수 있다.


📒 코드

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;

💭 후기

이제 점점 복잡한 문제들이 등장하는 것 같다.


🔗 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/151138


profile
精進 "정성을 기울여 노력하고 매진한다"

0개의 댓글