본문 바로가기

DB/Programmers SQL Kit

대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

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  ;