Programmers
[프로그래머스][MySQL] 자동차 대여 기록에서 장기/단기 대여 구분하기
winter17
2023. 2. 20. 22:57
https://school.programmers.co.kr/learn/courses/30/lessons/151138
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✅ 정답 코드
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 '장기 대여'
# 만약 9/2일날 빌려서 9/2일날 반납하면 1일 대여를 한거니까 (반납일-시작일) + 1,
# 이 값이 30일 이상이면 '장기대여' 아니면 '단기대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30' # 문제에서 '대여 시작일이 2022년 9월에 속하는 대여 기록'라고 명시
ORDER BY HISTORY_ID DESC;
전체 코드 해석 ▼
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
START_DATE 칼럼이 '2022-09-01'에서 '2022-09-30' 사이인 부분만
HISTORY_ID, CAR_ID, START_DATE('년(4자리)-월-일' 형태로), END_DATE('년(4자리)-월-일' 형태로),
RENT_TYPE(END_DATE - START_DATE 뺀 값에 1을 더한 값이 30 이상이면 '장기 대여' 아니라면 '단기 대여')을 출력하는데
HISTORY_ID 칼럼을 기준으로 내림차순으로 정렬해 줘
✅ 체크 포인트
► DATEDIFF 함수
# 날짜1 - 날짜2
DATEDIFF(날짜1, 날짜2);
► TIMESTAMPDIFF 함수
# 날짜1 - 날짜2 = 해당하는 단위로 값을 표시
TIMESTAMPDIFF(단위, 날짜1, 날짜2)
단위 | 설명 |
SECOND | 초 |
MINUTE | 분 |
HOUR | 시 |
DAY | 일 |
WEEK | 주 |
MONTH | 월 |
QUARTER | 분기 |
YEAR | 연 |