Lv2 - 자동차 평균 대여 기간 구하기
📌 문제 정보
- 문제 이름 : 프로그래머스 - (String, Date) 자동차 평균 대여 기간 구하기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/157342
📌 문제 요약
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블 : HISTORY_ID, CAR_ID, START_DATE, END_DATE
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
예시)
| HISTORY_ID | CAR_ID | START_DATE | END_DATE |
| 1 | 1 | 2022-09-27 | 2022-10-01 |
| 2 | 1 | 2022-10-03 | 2022-11-04 |
| 3 | 2 | 2022-09-05 | 2022-09-05 |
| 4 | 2 | 2022-09-08 | 2022-09-10 |
| 5 | 3 | 2022-09-16 | 2022-10-15 |
| 6 | 1 | 2022-11-07 | 2022-12-06 |
- 자동차 ID = 1 : 대여기간 5, 33, 30일인 기록 존재 => 평균 22.7일
- 자동차 ID = 2 : 대여기간 1, 3 => 평균 2
- 자동차 ID = 3 : 대여기간 30 => 평균 30
=> 대여기간 7일 이상인 자동차는 1, 3 / 평균 대여 기간 내림차순 및 자동차 ID를 기준으로 DESC
출력)
| CAR_ID | AVERAGE_DURATION |
| 3 | 30.0 |
| 1 | 22.7 |
📌 내 풀이 및 코드
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
- +1을 해야하는 이유를 몰랐음. (예를 들어 9/1 ~ 9/1도 1일 대여이기 때문에. (시작일 포함))
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** DATEDIFF() **
- DATEDIFF(끝나는날짜, 시작날짜) : 두 날짜 사이의 일 수 차이를 계산해주는 함수
- 주의할 점 : SELECT DATEDIFF('2024-07-01', '2024-07-01'); -- 결과: 0처럼 하루 대여인데 0이 나와서 +1를 꼭 해야함.
- 따라서 실제 사용 기간을 구하려면 DATEDIFF(...) + 1 하는 게 일반적