반응형
https://school.programmers.co.kr/learn/courses/30/lessons/151139
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의 개수를 세는 발상조차 하지 못했다.
반응형
'DB > MySQL' 카테고리의 다른 글
[프로그래머스] MySQL 자동차 대여 기록 별 대여 금액 구하기 (1) | 2023.11.24 |
---|---|
[프로그래머스] MySQL - 오랜 기간 보호한 동물(2) (0) | 2023.11.24 |
[Mysql] 프로그래머스 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2023.09.19 |
[Mysql] 별칭(alias) 정렬 (0) | 2023.09.15 |
[Mysql] 조건문 CASE~ WHEN~ THEN~ 알아보기 (0) | 2023.09.15 |
댓글