최대 1 분 소요

Problem

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

table
problem
example1
example2

Idea

2022년 8월부터 2022년 10월 중에 총 대여 횟수가 5회 이상인 자동차를 알기 위해서 해당 기간안의 레코드들을 대상으로 자동차 ID를 기준으로 그룹화한 뒤 레코드 개수가 5 이상인 아이디만 걸러 내었다.

위를 통해 해당 기간동안 5회 이상 빌린 자동차의 ID를 알 수 있지만 최종적으로 알아내야 하는 것은 해당 자동차들의 월별 이용 횟수이다. 따라서 8월부터 10월까지의 레코드들을 대상으로 월 날짜와 자동차 ID를 기준으로 그룹화한 뒤, 위 문단의 쿼리를 서브쿼리로 두고 자동차 ID가 서브 쿼리를 통해 얻은 자동차 ID 중에 있는 경우만 포함하도록 하였다.

Code

SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN 8 AND 10
GROUP BY MONTH, CAR_ID
HAVING CAR_ID = ANY (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE START_DATE BETWEEN DATE('2022-08-01') AND DATE('2022-10-31')
    GROUP BY CAR_ID
    HAVING COUNT(*) >= 5
)
ORDER BY MONTH, CAR_ID DESC;

Comment