대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/151139
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블의 월별 자동차 id 별 총 대여횟수를 출력한다.
단. 대여시작일 기준 2022년 8월 부터 10월까지 대여횟수가 5회 이상인 자동차들에 한해서이다. 또한 결과를 월을 기준 오름차, 자동자 id 기준 내림차 정렬한다.
1. id별로 그룹핑한 8월부터 10월까지의 기록을 조회한다.
2. 대여 횟수가 5회 이상인 기록으로 조건절을 건 car_id만 출력한다.
3. 해당 결과에 해당하는 car_id를 가지고 8월 ~ 10월의 기록을 출력한다.
- SQL
mysql : SELECT MONTH(START_DATE), CAR_ID, COUNT(*) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN 8 AND 10
GROUP BY CAR_ID
HAVING 5 <= COUNT(*)
) AND MONTH(START_DATE) BETWEEN 8 AND 10
GROUP BY CAR_ID, MONTH(START_DATE)
ORDER BY 1, 2 DESC
oracle : SELECT EXTRACT (MONTH FROM start_date) AS MONTH,CAR_ID, count(*) AS RECORDS
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where 1=1
and to_char(start_date,'yyyy-mm-dd') >= '2022-08-01'
and to_char(start_date,'yyyy-mm-dd') <= '2022-10-31'
AND CAR_ID IN ( SELECT DISTINCT CAR_ID
FROM
(SELECT CAR_ID, COUNT(*)
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
and to_char(start_date,'yyyy-mm-dd') >= '2022-08-01'
and to_char(start_date,'yyyy-mm-dd') <= '2022-10-31'
GROUP BY CAR_ID
HAVING COUNT(*) >= 5 ))
GROUP BY EXTRACT (MONTH FROM start_date),CAR_ID
ORDER BY EXTRACT(MONTH FROM start_date),CAR_ID DESC ;