문제
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

내가 작성한 정답
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


내가 작성한 정답
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에 그대로 적용할 수 없다.

→ 공백을 제거하지 않았기 때문에 FM을 작성하지 않으면 오답처리가 된다.
Share article