IT/SQL

[MySQL] 프로그래머스 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

무지개는 환상 2024. 1. 24. 10:28

<CAR_RENTAL_COMPANY_RENTAL_HISTORY> 테이블 구조

CAR_RENTAL_COMPANY_RENTAL_HISTORY

 

<문제>

 

 

 

<문제 풀이>

SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
AND 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 CAR_ID
               HAVING COUNT(CAR_ID) >= 5
              )
GROUP BY MONTH(START_DATE), CAR_ID
HAVING RECORDS > 0
ORDER BY MONTH(START_DATE), CAR_ID DESC;

 

문제의 접근 자체가 상당히 어려웠었다. 예상 결과셋을 보고 cross join 문제인가로 생각하여 사고를 잘못 접근한 것으로 애를 먹었다.

 

문제 자체는 지난 문제들의 짬뽕2 였다. (WHERE 절 서브쿼리 + 날짜 BETWEEN A AND B)

우선 서브쿼리로 문제에서 요구하는 사항관련에 해당하는 car_id 에 대한 날짜와 대여횟수로 구문을 짠다.

그 다음 해당 car_id 들이 메인쿼리 에 포함되는 서브쿼리로 만들어 준다.

마지막으로 메인쿼리 group에 첫번째 쿼리와 두번째 쿼리를 넣어준다.

 

문제를 풀다 한번 잘못 접근한 것을 새로운 방법으로 접근 하는 사고를 해야할 필요가 있다. 그 부분이 어느 시점일까에 대한 고민이 필요한것 같다..!

 

* GROUP BY A, B : A와 B로 그룹화를 진행 하고 출력 값은 A,B 순으로 사전 편찬식이다!

 

출처 : 프로그래머스 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기