
문제
https://school.programmers.co.kr/learn/courses/30/lessons/151138
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서
대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여
대여기록을 출력하는 SQL문을 작성 - 결과는 대여 기록 ID를 기준으로 내림차순 정렬
- 주의사항) START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리
정답 코드
SELECT HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE, '%Y-%m-%d'),
DATE_FORMAT(END_DATE, '%Y-%m-%d'),
CASE
WHEN (DATEDIFF(END_DATE, START_DATE)+1) >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC
코드 설명
- DATE_FORMAT(START_DATE, '%Y-%m-%d') : 날짜 형식을 YYYY-MM-DD 형식으로 변환
- DATEDIFF(END_DATE, START_DATE) : 시작일과 종료일 사이의 일수를 계산
* DATEDIFF 함수는 종료일을 포함하지 않음 → +1을 추가하여 종료일을 포함한 날짜 차이를 계산
개선된 코드
SELECT HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE, '%Y-%m-%d'),
DATE_FORMAT(END_DATE, '%Y-%m-%d'),
CASE
WHEN (DATEDIFF(END_DATE, START_DATE)+1) >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE >= '2022-09-01' AND START_DATE < '2022-10-01'
ORDER BY HISTORY_ID DESC
- WHERE START_DATE >= '2022-09-01' AND START_DATE < '2022-10-01'
- BETWEEN 보다 범위 설정이 더 직관적이고 명확함
첫 번째 시도 (실패)
SELECT HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE, '%Y-%m-%d'),
DATE_FORMAT(END_DATE, '%Y-%m-%d'),
CASE
WHEN DATEDIFF(END_DATE, START_DATE) >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC
- DATEDIFF(END_DATE, START_DATE) : 종료일을 제외한 일수를 계산
→ 대여 시작일과 종료일을 포함한 기간을 계산하려면 1일을 추가해야 함
'코딩 테스트 연습 > [프로그래머스][리트코드] MySQL' 카테고리의 다른 글
| [LV.4] 헤비 유저가 소유한 장소 (0) | 2025.07.03 |
|---|---|
| [LV.4] String, Date > 자동차 평균 대여 기간 구하기 (3) | 2025.07.02 |
| [LV.4] SELECT > 서울에 위치한 식당 목록 출력하기 (1) | 2025.06.30 |
| [LV.4] GROUP BY > 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2025.06.27 |
| [LV.4] GROUP BY > 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 ⭐ (2) | 2025.06.26 |