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

뚜비·2023년 2월 23일
0

SQL 코딩테스트

목록 보기
9/10

풀이


문제 설명

  • Table : CAR_RENTAL_COMPANY_RENTAL_HISTORY
    Column
    HISTORY_ID : 자동차 대여 기록 ID
    CAR_ID : 자동차 ID
    START_DATE : 대여 시작일
    END_DATE : 대여 종료일
  • 대여 시작일2022년 9월에 속하는 대여 기록에 대해서
    대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력
    결과는 대여 기록 ID를 기준으로 내림차순 정렬


DATE_DIFF

  • DATEDIFF('구분자','Start_Date','End_Date')
    여기서 구분자란 어떤 차이를 구할지 정하는 부분이다. (년도면 yy, 일수면 dd)
    - 주의) 한 달(31일) = 31일 - 1일 + 1

알고리즘은 다음과 같다.

  1. DATE_DIFF를 이용하여 대여 기간을 구한다.
  2. 대여기간을 CASE WHEN expression을 이용하여 장기 대여 인지 단기 대여인지 구분 한 후
  3. AS RENT_TYPE으로 컬럼명 추가!
  4. WHERE LIKE 구문으로 대여 시작일이 2022년 9월에 속하는 대여 기록을 찾고
  5. ORDER BY 로 정렬
  6. 이때 DATE TYPE은 모두 DATE_FORMAT을 이용해서 년월일만 나오도록 한다.

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;

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

0개의 댓글