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월까지의 대여 기록이 아닌 전체 기간의 대여기록을 찾아서 데이터를 추출한다.
'MYSQL > 프로그래머스 LV03' 카테고리의 다른 글
즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2025.03.10 |
---|---|
카테고리 별 도서 판매량 집계하기 (0) | 2025.03.06 |
대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2025.03.04 |
조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2025.03.04 |
조건에 맞는 사용자 정보 조회하기 (0) | 2025.03.04 |