[프로그래머스/MySQL] 자동차 평균 대여 기간 구하기(개념 및 정답)

DATEDIFF, ROUND, 서브쿼리(또는 HAVING)
Seo Jimin's avatar
Mar 17, 2026
[프로그래머스/MySQL] 자동차 평균 대여 기간 구하기(개념 및 정답)

문제 링크

개념

DATEDIFF

DATEDIFF 함수에 끝나는 날짜와 시작 날짜를 넣으면 두 날짜의 차를 계산해준다.
DATEDIFF(END_DATE, START_DATE)
하지만 위 DATEDIFF 함수는 말 그대로 날짜의 차를 계산해주는데, 문제를 보면 대여 당일도 포함하고 있어서 +1을 붙여줘야 한다.
DATEDIFF(END_DATE, START_DATE)+1

ROUND

ROUND 함수를 사용하면 반올림해서 소수점 몇 번째 자리까지 나타낼지 정할 수 있다. 예를 들어 첫째 자리까지 나타낸다 한다면 소수점 둘째 자리에서 반올림 시켜준다.
ROUND(5/3,1)

서브쿼리

서브쿼리를 활용하면 서브쿼리의 결과를 기반으로 데이터 필터링, 검색, 조작 등에 유용하게 사용할 수 있다. 형태는 SELECT, FROM, WHERE 등에 ()를 사용하여 그 안에 쿼리문을 작성하면 된다.
# WHERE절에 서브 쿼리를 사용한 예시 SELECT * FROM TABLE_EXAMPLE1 WHERE MEM_ID IN (SELECT MEM_ID FROM TABLE_EXAMPLE2 WHERE LOCATION = '부산');
💡
사실 HAVING을 사용하면 더 간단하게 작성 가능하다ㅎㅎ
 

제출 답안

SELECT T.CAR_ID, T.AVERAGE_DURATION FROM ( 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 ) T WHERE T.AVERAGE_DURATION >= 7 ORDER BY T.AVERAGE_DURATION DESC, T.CAR_ID DESC;
 
# HAVING절을 사용했을 때의 답 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 AVG(DATEDIFF(END_DATE, START_DATE)+1) >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
Share article

miniiya