본문 바로가기
코딩테스트/SQL

[프로그래머스/MySQL] 대여횟수가 많은 자동차들의 월별 대여 횟수 구하기 풀이 (GROUP BY, DATE_FORMAT, WHERE 서브쿼리, MONTH)

by JI NY 2025. 3. 13.

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

(MySQL, GROUP BY, MONTH, DATE_FORMAT, BETWEEN, WHERE 서브쿼리)

 

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/151139

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


 

2. 문제 해결 아이디어 (풀이)

 

1. WHERE 서브쿼리를 이용하여 2022-8 월부터 10월까지 자동차별로 5개가 넘는 경우의 CAR_ID를 가져온다.

* DATE_FORMAT을 이용하여 년, 월 형식을 가져온다.

* BETWEEN A AND B를 함께 사용해도 된다.

 

2. 다시 본 쿼리에서 2022-8월부터 10월까지 걸러준다. 

* 서브쿼리에서 CAR_ID로 가져왔기 때문에, 데이터에 7월이 있다면 그것도 집계되어 버릴 수 있음

 

3. GROUP BY로 월, 자동차별로 묶어서 개수를 세어준다.

* GROUP BY 열1, 열 2... 이런 식으로 여러 개를 그루핑 할 수 있다.

* HAVGING을 이용하여 그루핑 결과에서 조건을 줄 수 있다. 

 

3.1. 이때, SELECT 절에 월의 숫자만 나타내도록 'MONTH' 함수를 이용해 준다.

* DATE_FORMAT("%m") 은 한자리 숫자 앞에 0이 붙기 때문에 사용하지 않는다.


 

3. 코드

SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECOREDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE CAR_ID IN  ( # 2022-08 ~ 2022-10 중에 5개 넘는 친구들만
    SELECT CAR_ID 
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE 
        DATE_FORMAT(START_DATE, "%Y-%m") = '2022-08' OR
        DATE_FORMAT(START_DATE, "%Y-%m") = '2022-09' OR
        DATE_FORMAT(START_DATE, "%Y-%m") = '2022-10'
    GROUP BY CAR_ID
    HAVING COUNT(*) >= 5 ) # 5 이상인 경우 
    AND (DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10') # 꺼낸 CAR_ID중 7월이 있을수도 있음 그래서 한번 더 걸러주기
GROUP BY  MONTH, CAR_ID # 월별로 묶어야 ㅎㄴ다.
HAVING COUNT(*) > 0  # 0보다 커야한다. 
ORDER BY MONTH ASC, CAR_ID DESC

 

 

 


4. 마무리

 

 AND (DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10') # 이

- 위 코드와 같이, 한번 더 본 쿼리 WHERE로 데이터를 나눠주는 게 요점이었다.

- 이런 점들도 고려해야 하는 것을 알게 되었다.

 

 

- 참고자료

https://velog.io/@dl-00-e8/Programmers-%EB%8C%80%EC%97%AC-%ED%9A%9F%EC%88%98%EA%B0%80-%EB%A7%8E%EC%9D%80-%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%A4%EC%9D%98-%EC%9B%94%EB%B3%84-%EB%8C%80%EC%97%AC-%ED%9A%9F%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0

 

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

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼

velog.io

 

댓글