[SQL 오답] 자동차 평균 대여 기간 구하기 (AVG와 SUM DIV COUT의 차이)

byeol·2023년 4월 17일
0

접근

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;

profile
꾸준하게 Ready, Set, Go!

0개의 댓글