문제풀이/SQL

자동차 평균 대여 기간 구하기(SQL) 문제풀이

soo-dal 2024. 3. 7. 11:20

문제 

https://school.programmers.co.kr/learn/courses/30/lessons/157342

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 접근 방식

 

문제를 정리해보면 아래와 같다.

1. [자동차 id ,대여 평균 기간]을 출력한다
2. 이때, [대여 평균 기간]이 7일 이상인 것만 출력
3. [평균 대여 기간, 내림차순 정렬] -> [자동차 id, 내림차순 정렬]

 

 

이 문제의 가장 핵심은 대여 평균 기간을 구하는 것이다. [차량별]로 [누적 대여 기간]을 구할 필요가 있으며, 이를 차량의 이용 횟수로 나눠줘야한다. 여기서, SQL 문 Group By 함수를 사용할 때 AVG 라는 집계 함수를 사용하여 이를 한번에 처리할 수 있다.

1. 차량별 -> Group By car_id

2. 대여 기간 평균
> 개별 대여 기간 -> DATEDIFF(end_date,start_date)+1
> 대여 기간 평균 -> AVG(DATEDIFF(end_date,start_date)+1)

3. 소수 둘째자리에서 반올림
2번에서 구한 값을 반올림 -> ROUND( ~~~, 1)

 

위에서 구한 대여 평균 기간을 통해 7일 이상 대여한 것들을 정렬해서 출력하면 된다. 

1. [대여 평균 기간] 7일 이상 -> HAVING average_dauration >=7

2. 평균 대여 기간, 자동차 ID 내림차순 정렬 -> ORDER BY arverage_duration DESC, car_id DESC

 

 

코드

-- 코드를 입력하세요
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 ;

 

 

회고

아래 항목에 대해 배울 수 있었다.

1. Group By, AVG 를 어떻게 같이 사용하는지
2. HAVING을 통한 그룹화된 데이터 필터링
2. ROUND 함수를 통한 숫자 반올림