기록하고 까먹지 말기

(SQL) 자동차 평균 대여 기간 구하기 본문

전공/프로그래머스

(SQL) 자동차 평균 대여 기간 구하기

yha97 2023. 10. 1. 10:58

날짜 : 2023. 10. 01

사용 언어 : oracle

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/157342?language=oracle

 

코드

-- 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 
-- 평균 대여 기간은 소수점 두번째 자리에서 반올림
-- 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 
-- 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬
select car_id, round(avg(end_date - start_date + 1), 1) 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 average_duration desc, car_id desc
;

 

풀이

- car_id로 그룹핑한 다음, 각 그룹별 평균 대여기간을 구한다.

- 대여기간의 경우에 end_date와 start_date와의 차이를 구한 후 1을 더하여 구한다.

(1일부터 5일동안 대여한 경우에는 5-1 = 4일이 아닌, 꽉 채워서 대여한 것이기 때문에 5-1+1 = 5가 되기 때문이다.)

- 그 다음 해당 값을 소수점 2의 자리에서 반올림한 다음, 7 이상인 케이스만 걸러내어 정렬 후 출력한다.

 

 

알게된 점

- having에서 alias를 사용하여 계속 오류가 발생했고, 각각의 대여기간을 구하면서 1을 더하지 않아 문제에서 오답이 발생했다.

- 문제를 풀면서 alias 관련해 계속 오류가 뜨는 것을 확인했는데 이 점을 주의해야겠다.

 

 

참고 사이트