CODING TEST/MySQL

Lv2 - 자동차 평균 대여 기간 구하기

iamyuunzo 2025. 7. 29. 15:17

📌 문제 정보

- 문제 이름 : 프로그래머스 - (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 하는 게 일반적