처음 작성한 틀린 쿼리
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절 없이도 원하는 결과가 나왔기에 다른 케이스에 대해 생각해보지 못해서 문제를 틀린 것 같다.
문제를 풀 때마다 여러 케이스에 대해 생각해보는 연습을 해야겠다.
'TIL(Today I Learned)' 카테고리의 다른 글
JPA(Java Persistence API)의 이해 2 (0) | 2024.05.10 |
---|---|
JPA(Java Persistence API)의 이해 1 (0) | 2024.05.09 |
Baekjoon 구간 합 구하기 4 문제를 풀면서 삽질하기 (1) | 2024.05.02 |
숫자 야구 게임을 구현하면서 다시 객체 지옥에 빠지다. (1) | 2024.05.01 |
계산기 프로젝트 코드 수정 및 예외 처리 (0) | 2024.04.30 |