CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/151139
WITH five AS (
SELECT MONTH(START_DATE) as MONTH, CAR_ID, COUNT(CAR_ID) as RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
### 2022-8 ~ 10월까지
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
## 월별, car_id 그룹화하여 -> 8월의 여러 개의 record가 있을 수 있음 근데
GROUP BY MONTH(START_DATE), CAR_ID
)
SELECT *
FROM five
GROUP BY CAR_ID
HAVING SUM(RECORDS) >= 5
ORDER BY MONTH, CAR_ID DESC
SUM(RECORDS)를 같이 출력하면 5이상의 대여 기록이 있어 조건은 만족한다는 것을 알 수 있다. ## 월별, ID 별로 그룹화
WITH five AS (
SELECT MONTH(START_DATE) as MONTH, CAR_ID, COUNT(CAR_ID) as RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
### 2022-8 ~ 10월까지
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
## 월별, car_id 그룹화
GROUP BY MONTH(START_DATE), CAR_ID
)
SELECT MONTH, f.CAR_ID, RECORDS
FROM( -- 대여 횟수가 5 이상 ID 추출하여 셀프 조인으로 월별 id records를 출력
SELECT CAR_ID
FROM five
GROUP BY CAR_ID
HAVING SUM(RECORDS) >= 5
) aa
INNER JOIN five f
ON aa.car_id = f.car_id
ORDER BY MONTH, f.CAR_ID DESC
%으로 모든 날짜를 이용하려고 했지만 되지 않아 임의로 날짜를 정해주었다.