TIL(Today I Learned)

TIL - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

Happy._. 2024. 5. 8. 22:24

처음 작성한 틀린 쿼리

SELECT month(start_date), car_id, count(car_id) AS records
FROM car_rental_company_rental_history
WHERE car_id IN (
    SELECT car_id
    FROM car_rental_company_rental_history
    WHERE start_date BETWEEN '2022-08-01' AND '2022-10-31'
    GROUP BY 1
    HAVING count(car_id) > 4
) 
GROUP BY 1, 2
ORDER BY 1, 2 DESC

 

서브 쿼리의 where절에 조건에 맞게 대여 시작일(start_date)이 2022년 8월 ~ 2022년 10월의 자동차 ID만을 필터링했고 그에 맞게 나머지 조건도 충족했다고 생각했는데 채점 결과는 오답이었다.

혼자서는 답을 찾을 수 없을 것 같아서 프로그래머스 질문하기에서 내 궁금증을 해결할 답을 찾았다.

 

다음 링크는 내 의문을 풀어 준 해설이 있는 프로그래머스 질문하기 링크다.

https://school.programmers.co.kr/questions/64517

 

내 쿼리의 문제점은 특정 기간의 자동차 ID를 구했지만 해당 ID로 전체 기간에 대해 특정 ID에 대한 모든 데이터를 가져오는 것이 문제였다.

 

다음 쿼리는 채점을 통과한 쿼리이다.

위 쿼리와의 차이는 외부 쿼리에서 날짜 필터링을 한 번 더 하고 안하고의 차이이다.

SELECT month(start_date), car_id, count(car_id) AS records
FROM car_rental_company_rental_history
WHERE car_id IN (
    SELECT car_id
    FROM car_rental_company_rental_history
    WHERE start_date BETWEEN '2022-08-01' AND '2022-10-31'
    GROUP BY 1
    HAVING count(car_id) > 4
) 
AND month(start_date) IN (8, 9, 10)
GROUP BY 1, 2
ORDER BY 1, 2 DESC

 

프로그래머스 내 테스트 결과에서는 외부 쿼리의 where절 없이도 원하는 결과가 나왔기에 다른 케이스에 대해 생각해보지 못해서 문제를 틀린 것 같다.

문제를 풀 때마다 여러 케이스에 대해 생각해보는 연습을 해야겠다.