[SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

이경영·2023년 6월 8일
0

오라클

목록 보기
13/43

내가 작성한 틀린코드

-- 코드를 입력하세요
SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH, 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 TO_DATE('2022-08-01','YYYY-MM-DD') AND TO_DATE('2022-10-31','YYYY-MM-DD')
    GROUP BY CAR_ID 
    HAVING COUNT(CAR_ID) >= 5)
GROUP BY EXTRACT(MONTH FROM START_DATE), CAR_ID
ORDER BY EXTRACT(MONTH FROM START_DATE), CAR_ID DESC

왜 틀렸는지 처음엔 알수없었다.

맞는 코드

-- 코드를 입력하세요
SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH, 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 TO_DATE('2022-08-01','YYYY-MM-DD') AND TO_DATE('2022-10-31','YYYY-MM-DD')
    GROUP BY CAR_ID 
    HAVING COUNT(CAR_ID) >= 5)
```AND (START_DATE) BETWEEN TO_DATE('2022-08-01','YYYY-MM-DD') AND TO_DATE('2022-10-31','YYYY-MM-DD')```
GROUP BY EXTRACT(MONTH FROM START_DATE), CAR_ID
```HAVING COUNT(CAR_ID) >= 1```
ORDER BY EXTRACT(MONTH FROM START_DATE), CAR_ID DESC
  • `*3개로 표시한 부분을 보면
    where 내부의 select 절에서 범위가 08월에서 10월사이인 car_id 만을 뽑아서 car_id 만이 뽑혀있는 상태이다.
    where의 select조건절은 car_id를 찾기위해서 적용된 부분이기 때문에 메인쿼리에도 한번 더 써줘야한다.

프로그래머스의 질문란에 나와 반대로 왜 서브쿼리에 써줘야하냐고 질문하신 분이 있었다. 참고하길 바람
https://school.programmers.co.kr/questions/46495

profile
꾸준히

0개의 댓글