https://school.programmers.co.kr/learn/courses/30/lessons/157342
아래 두 가지 경우를 보겠습니다. 저는 첫 번째로 접근하여 틀렸습니다.
문제 자체는 제대로 접근하였지만
SUM을 한 뒤에 COUNT로 나누는 과정에서 정수형으로 버림이 진행되는거 같습니다.
SELECT CAR_ID, ROUND(SUM(DATEDIFF(END_DATE,START_DATE)+1)DIV(COUNT(CAR_ID)),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
찾아보니 아래 같이 FLOOR과 DIV를 사용하면 첫번째 자리를 버림한다는 것을 알게되었습니다.
# 이렇게 하면 소수점이 나옴
SELECT 5/3; # 1.66667
# 소수점 버리기
SELECT FLOOR(5/3); # 1
# 소수점 버리기
SELECT 5 DIV 3; # 1
따라서 아래와 같이 AVG를 통해서 소수점까지 구하는 방법을 이용해야 합니다.
추가적으로 ROUND(대상수,N까지 구함 그 아래 반올림)
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 AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;