본문 바로가기
DB/MySQL

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

by 애기 개발자 2023. 11. 24.
반응형

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

 

프로그래머스

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

programmers.co.kr

 

Level 3난이도인데 풀기 어려웠다...

 

우선 첫번째 관문은 각 월 별 car_id가 몇개인지 뽑는것이었다.

 

select car_id, count(history_id) from car_rental_company_rental_history 
where date_format(start_date, '%Y%m') >= '202208' and date_format(start_date, '%Y%m') <= '202210'
group by car_id having count(history_id) >= 5
order by car_id

 

22년8월부터 22년 10월 사이에 car_id로 묶어서, history_id가 5개 이상인 것을 찾는 부분이다.

 

파악하기 위해 정렬과 count 컬럼을 추가했다.

 

 

위처럼 8월~10월사이 5개가 넘는 car_id 값을 묶어서 추출한 결과이다.

 

그리고 저 쿼리를 서브쿼리로서 만들면 된다.

 

select month(start_date) as month, car_id, count(history_id) as records
from car_rental_company_rental_history
where car_id in (
    select car_id from car_rental_company_rental_history 
    where date_format(start_date, '%Y%m') >= '202208' and date_format(start_date, '%Y%m') <= '202210'
    group by car_id having count(history_id) >= 5
)
and date_format(start_date, '%Y%m') >= '202208' and date_format(start_date, '%Y%m') <= '202210'
group by car_id, month
order by month, car_id desc;

 

* 서브쿼리에서 기간으로 검색했는데 왜 또 메인쿼리에서 기간으로 검색하는가?

서브쿼리에서 추출한 car_id에 해당되면 8~10월 사이가 아니더라도 출력될 수 있음. 그래서 메인쿼리에서도 기간 where절을 넣어줘야 함.

 

8~10월 사이 5번 이상 대여기록이 있는 car_id를 가져온 후 car_id와 month값으로 group by를 해준 후 내부에 있는 history_id의 개수를 세면 된다.

 

난 저 history_id의 개수를 세는 발상조차 하지 못했다.

 

  

반응형

댓글