본문 바로가기
MySQL/PROGRAMMERS

Lv.3 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

by Freely_ 2025. 2. 5.
728x90
반응형
728x90
 

프로그래머스

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

programmers.co.kr

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL 문을 작성해주세요.

결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해 주세요.

특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해 주세요.

 

  • 풀이
SELECT MONTH(START_DATE) MONTH, CAR_ID, COUNT(*) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
      AND CAR_ID IN (SELECT CAR_ID
                     FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                     WHERE DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
                     GROUP BY CAR_ID
                     HAVING COUNT(CAR_ID) >= 5)
GROUP BY CAR_ID, MONTH(START_DATE)
ORDER BY 1, 2 DESC

 

  • WHERE에 DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10' 조건을 포함하는 이유

1. 서브쿼리에서 CAR_ID를 필터링했지만 메인 쿼리에서는 모든 기간의 데이터를 조회하게 됨

2. 즉, CAR_ID가 조건에 맞더라도 2022년 8-10월 외의 기간도 조회될 가능성이 있음

3. 따라서 DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10' 조건을 추가하여 메인 쿼리에서도 2022년 8-10월만 조회하도록 제한해 줌

728x90
반응형