문제
https://school.programmers.co.kr/learn/courses/30/lessons/151139
접근방법
쉽게 설명하면,
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
개선할 점
..
'코딩테스트 준비 > SQL문법' 카테고리의 다른 글
[프로그래머스 LV3] - 조건에 맞는 사용자 정보 조회하기(string, date) SQL (0) | 2024.02.18 |
---|---|
[프로그래머스 LV5] - 상품을 구매한 회원 비율 구하기(join) SQL (0) | 2024.02.17 |
[프로그래머스 LV4] - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기(join) SQL (0) | 2024.02.17 |
[프로그래머스] - 자동차 대여 기록에서 장기/단기 대여 구분하기 SQL - String, Date (0) | 2024.02.16 |
[프로그래머스] - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기(group by) SQL (0) | 2024.02.15 |