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

켈로그·2025년 6월 11일

SQL

목록 보기
17/20

프로그래머스 - SQL 고득점 Kit - 자동차 대여 기록에서 장기/단기 대여 구분하기


📌 문제 설명

자동차 대여 회사의 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
2022년 9월에 시작한 대여 기록 중, 대여 기간이 30일 이상이면 '장기 대여',
그보다 짧으면 '단기 대여'로 구분해 출력해야 합니다.

  • 컬럼명: RENT_TYPE
    정렬 기준: HISTORY_ID 내림차순

테이블 구조

컬럼명타입NULL 여부설명
HISTORY_IDINTEGERNOT NULL대여 기록 ID
CAR_IDINTEGERNOT NULL자동차 ID
START_DATEDATENOT NULL대여 시작일
END_DATEDATENOT NULL대여 종료일

풀이

SELECT
  HISTORY_ID,
  CAR_ID,
  START_DATE,
  END_DATE,
  CASE
    WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
    ELSE '단기 대여'
  END AS RENT_TYPE
FROM
  CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE
  DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY
  HISTORY_ID DESC;

풀이 설명

STEP 1. 날짜 필터링 : DATE_FORMAT(date, '%Y-%m')

WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
  • DATE_FORMAT()으로 날짜를 YYYY-MM 형태로 바꿔 9월에 해당하는 데이터만 필터링합니다.

STEP 2. 대여 기간 계산 및 구분 : DATEDIFF(END_DATE, START_DATE)

CASE
  WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
  ELSE '단기 대여'
END AS RENT_TYPE
  • DATEDIFF()는 두 날짜 간 일수 차이를 계산합니다.
  • 시작일과 종료일 모두 포함되므로 + 1을 해줘야 정확한 대여 일수를 구할 수 있습니다.
  • 30일 이상은 '장기 대여', 미만은 '단기 대여'로 구분합니다.

STEP 3. 결과 정렬

ORDER BY HISTORY_ID DESC
  • HISTORY_ID를 기준으로 내림차순 정렬합니다.

❗ INSERT, ALTER, SELECT 문 혼동 주의!

구문 유형목적예시
INSERT INTO새로운 행(데이터) 추가INSERT INTO users (id, name) VALUES (1, 'Kim');
ALTER TABLE테이블 구조(컬럼) 변경ALTER TABLE users ADD COLUMN age INT;
SELECT데이터 조회 및 가공SELECT name, CASE WHEN age > 20 THEN '성인' END AS 구분 FROM users;

이번 문제에서는 RENT_TYPE 컬럼을 결과로 보여주는 것일 뿐, 테이블에 실제로 추가하는 게 아니므로 SELECT문만 사용

profile
호랑이기운

0개의 댓글