코딩테스트 준비/SQL문법

[프로그래머스] - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (group by) SQL

SeoburiFaust 2024. 2. 15. 16:20

 문제

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

 

프로그래머스

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

programmers.co.kr

접근방법

쉽게 설명하면,

8월부터 10월까지 대여횟수가 5회 이상인 자동차들에 대해서 

해당 기간 동안 월별 대여횟수를 출력하는 문제다.

 

처음에 문제를 보고 헷갈렸지만,

 

일단 8월부터 10월까지 총 대여횟수가 5회 이상인 자동차들의 id를 알면,

그 id의 자동차가 월별로 몇 번 대여됐는 지를 탐색하면 된다.

 

따라서 where안에 subquery를 넣어 car_id가 8-10월 사이 총 대여 횟수 5회를 넘기는 지 확인했다.

 

subquery말고도 mainquery에도 where문 안에

"year(start_date) = 2022 and month(start_date) between 8 and 10"

를 적어줘야 하는데, 그 이유는 간단하다.

문제에서 제시하는 범위가 8월부터 10월까지이기 때문이다.

 

subquery에 적었다고 안 적어도 된다고 생각하면 착각이다.

subquery에서는 car_id를 식별하기 위해 적어준 것일 뿐이다.

 

코드

select month(start_date) as month, car_id, count(*) as records
from car_rental_company_rental_history
where year(start_date) = 2022 and month(start_date) between 8 and 10 
and car_id in (select car_id
    from car_rental_company_rental_history
    where year(start_date) = 2022 and month(start_date) between 8 and 10
    group by car_id
    having count(*) > 4)
group by month(start_date), car_id
having count(*) > 0
order by month(start_date), car_id desc

개선할 점

..