문제풀이/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 함수를 통한 숫자 반올림