MYSQL/프로그래머스 LV03
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
수스리
2025. 3. 6. 18:48
https://school.programmers.co.kr/learn/courses/30/lessons/151139
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
WITH over5 AS (
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(*) >= 5
)
SELECT
MONTH(H.start_date) AS MONTH,
H.CAR_ID,
COUNT(*) AS RECORDS
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY H
JOIN
over5 O ON H.car_id = O.car_id
WHERE start_date BETWEEN "2022-08-01" AND "2022-10-31"
GROUP BY
MONTH(H.start_date), H.car_id
ORDER BY
MONTH(H.start_date) ASC, H.car_id DESC;
위가 정답 코드다. 그러나 초반에 이 문제를 틀렸다. 우선 WITH으로 가상 테이블을 만든다는 생각을 못했다. 어찌어찌 가상 테이블을 만들고 또 문제가 생겼다. 아래는 내가 틀린 코드다.
WITH over5 AS (
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(*) >= 5
)
SELECT
MONTH(H.start_date) AS MONTH,
H.CAR_ID,
COUNT(*) AS RECORDS
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY H
JOIN
over5 O ON H.car_id = O.car_id
GROUP BY
MONTH(H.start_date), H.car_id
ORDER BY
MONTH(H.start_date) ASC, H.car_id DESC;
꼼꼼한 독자라면 알겠지만 WHERE 절이 없다. WHERE 절이 없으면 이 코드는 8월부터 10월까지의 대여 기록이 아닌 전체 기간의 대여기록을 찾아서 데이터를 추출한다.