[SQL문제풀기] 자동차 평균 대여 기간 구하기

silver's avatar
Jan 20, 2025
[SQL문제풀기] 자동차 평균 대여 기간 구하기

문제

MYSQL

내가 작성한 오답

: END_DATE - START_DATE 를 하면 하루 빌린 것들도 0으로 나오는 것처럼 날짜들이 전체적으로 하루 부족하게 나온다.
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)),1) AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY 1 HAVING AVG(DATEDIFF(END_DATE,START_DATE)) >= 7 ORDER BY 2 DESC, CAR_ID DESC
notion image

내가 작성한 정답

SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1),1) AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY 1 HAVING AVG(DATEDIFF(END_DATE,START_DATE)+1) >= 7 ORDER BY 2 DESC, CAR_ID DESC
💡
DATEDIFF(종료일, 시작일) → [종료일-시작일]을 계산해준다.
 

ORACLE

내가 작성한 오답

: average_duration을 소수점 두번째 자리에서 반올림하라고 했기 때문에 소숫점 첫째자리까지는 무조건 출력되어야 했다.
SELECT CAR_ID, ROUND(AVG((END_DATE-START_DATE)+1),1) AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING ROUND(AVG((END_DATE-START_DATE)+1),1) >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
notion image
 
notion image

내가 작성한 정답

SELECT CAR_ID, TO_CHAR(ROUND(AVG(END_DATE - START_DATE)+1, 1), 'FM999.0') AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING ROUND(AVG(END_DATE - START_DATE)+1, 1) >= 7 ORDER BY ROUND(AVG(END_DATE - START_DATE)+1, 1) DESC, CAR_ID DESC;
💡
'FM9999999990.0' 형식은 정수 부분이 없을 경우에도 소수점 이하 한 자리인 .0을 항상 표시하게 해준다. TO_CHAR로 'FM9999999990.0'형식으로 변환해준다. → 이 때 FM은 fill mode로 숫자 형식을 지정할 때 불필요한 공백을 제거하도록 지시한다. 즉, 숫자의 자릿수가 부족할 때 공백 대신 실제 숫자를 출력하게 된다. → 이렇게 변환된 'FM9999999990.0'는 문자열 형식이되기 때문에 order by에 그대로 적용할 수 없다.
notion image
→ 공백을 제거하지 않았기 때문에 FM을 작성하지 않으면 오답처리가 된다.
 
Share article

silver