강의로 돌아가기
jasonkim11

MySQL 쉬운 답안

작성중인 코드―solution.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 MONTH(START_DATE) IN (8, 9, 10)
                 GROUP BY CAR_ID
                 HAVING COUNT(HISTORY_ID) >= 5)
      AND MONTH(START_DATE) IN (8, 9, 10)
GROUP BY MONTH, CAR_ID
HAVING COUNT(HISTORY_ID) >= 1
ORDER BY MONTH
       , CAR_ID DESC;
  • 콘서타54

    10번 줄 식이 없으면 오답이 나는 이유가 궁금합니다. 8~10월이 아닌 다른 월 때문인 것 같은데요. 이는 7번 줄로 이미 처리된 것 아닌가요?? 7번 줄의 의미는 8~10월 사이를 조건으로 거는 것일 터인데요. 그런데 아래의 8, 9번 줄이 뒤따르면서, 조건의 결론이 5회 이상이라는 의미로 바뀌어버린 걸까요?

    콘서타54―2024.01.18 20:33
  • jasonkim11

    말씀하신 것처럼 8~10월이 아닌 다른 월 때문입니다. 우선 WHERE문에서 8~10월에 대여를 시작한 차량 목록(CAR_ID)을 가져옵니다. 이후 해당 차량들에 대한 대여 기록(HISTORY_ID)을 가져옵니다. ⭐️ 이때 10번 줄 식이 없으면?? 8~10월에 대여를 시작한 차량들의 '8~10월에 해당하지 않는 월에 대한' 대여기록을 가져올 수 있습니다. 문제를 다시 읽어보면 ‘해당 기간 동안의’ 라고 명시돼 있습니다. 예를 들면, 서브쿼리에서 1/2/3번 차량(8~10월에 대여를 시작한)을 필터링했다고 가정하겠습니다. 10번 줄이 없다면 1/2/3번 차량들의 5월 또는 6월 등등의 대여기록(HISTORY_ID)을 가져오게 됩니다. 이해 안되시면 댓글 달아주세용!

    jasonkim11―2024.01.21 13:29
  • scottXchoo

    오 저도 이 부분 궁금했는데 답변 감사합니다! 정리하자면, WHERE문에서 8~10월에 대여한 CAR_ID를 가져오고 이후 이 CAR_ID들에 대한 모든 기록들을 가져오군요. 그러니까 그 모든 기록들 중에서 '8~10월에 대여한' 이라는 조건을 추가해야되군요.

    scottXchoo―2024.02.15 16:33
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.