참치코더의 꿈 메모장

Oracle / 프로그래머스 - 자동차 평균 대여 기간 구하기 본문

Oracle

Oracle / 프로그래머스 - 자동차 평균 대여 기간 구하기

참치깡 2025. 9. 18. 21:05
728x90

 

1
2
3
4
5
SELECT CAR_ID, TO_CHAR(ROUND(AVG(END_DATE - START_DATE + 1), 1), 'FM99990.0') AS 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;
cs

 

- 전체 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간 리스트를 출력하는 문제이다.

 

- 해당하는 테이블을 FROM 절로 잡고 자동차들의 평균 대여기간을 구해야 하기 때문에

  CAR_ID를 기준으로 그룹핑 해주었다. 다음 HAVING 조건으로 END_DATE 에서 START_DATE를 빼서 대여기간을 

 구한 후에(일수가 1일 모자르기 때문에 + 1) 평균 대여 기간이 7일 이상인 자동차들의 평균 이므로  >= 7을 해주었다.

 

-  이렇게 구한 값에 SELECT 문으로 CAR_ID 와 평균값을 입력해 준 다음(TO_CHAR을 이용하여 ' FM99990.0 ' 포맷으로 

   해당 평균을 소수점 두번째 자리에서 반올림) 해준다면 값을 얻을 수 있다.

  

- FM -> 불필요한 왼쪽 공백 제거 , 99990 -> 정수 부분 숫자 자리를 표시, 9가 숫자 자리 0은 숫자가 없으면 0으로 채움

 

- 조금 의문이긴 한데... 문제에서 소수점 2자리까지 반올림이니까 ROUND(..., 2) 'FM99990.00' 이런식으로 해야하지 않나... 

  아무튼 정답은 'FM99990.0'  문제 설명이 모호한것 같다

 

- 마지막으로 ORDER BY 문으로 문제 조건처럼 평균 대여 기간으로 내림차순 정렬, 평균 대여 기간이 같으면 자동차 ID를

  기준으로 내림차순 정렬하면 문제의 정답을 얻을 수 있다 ^^

 

 

 

728x90
Comments