본문 바로가기
Exercises 🤓/SQL

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

by 째파 2023. 1. 26.
반응형

아무래도 SQL로 실제 데이터에 쿼리를 날릴 때에는 DATE TYPE의 컬럼을 처리하는 일이 많다.

그래서 관련 프로그래머스 문제가 있길래 풀어보았다.

전 문제와 같은 자동차 대여기록 테이블이었다.

 


 

🤔 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

MySQL, Oracle SQL로 풀 수 있고 데이터 타입만 잘 정해주면 되기 때문에 Lv.1의 쉬운 난이도 문제이다.

 

😄 나의 풀이

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) >= 29 THEN '장기 대여'
    ELSE '단기 대여' END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE YEAR(START_DATE) = 2022 AND MONTH(START_DATE) = 9
ORDER BY HISTORY_ID DESC

START_DATE와 END_DATE가 년-월-일 시-분-초 형식의 날짜 데이터였기 때문에 년-월-일 데이터 형식으로 바꾸어주었다.

RENT_TYPE 컬럼의 '장기 대여'와 '단기 대여'는 CASE WHEN을 사용해서 만들어주었다.

이때, START_DATE와 END_DATE가 동일한 날이 하루 대여한 날을 의미하기 때문에 30일 이상 대여한 ID를 구하는 조건으로는 29일 이상을 넣어주었다.

이 부분만 주의하면 쉽게 해결할 수 있다.

반응형

댓글