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

EunBi Na·2024년 3월 3일
0

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지
총 대여 횟수가 5회 이상인 자동차들에 대해서
해당 기간 동안의 월별 자동차 ID 별
총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요.

결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요.

특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

(조건)
DATE_FORMAT을 주어진 조건에 맞추어 찾기 + CAR_ID와 MONTH를 기준으로 그룹화하기 + 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 조건 걸기

작성쿼리

SELECT TO_CHAR(START_DATE, 'MM') AS MONTH, CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY START_DATE, CAR_ID
HAVING TO_CHAR(START_DATE, 'YYYYMM') >= '202208'
AND TO_CHAR(END_DATE, 'YYYYMM') <= '202210'

서칭쿼리_ORACLE

SELECT EXTRACT(MONTH FROM START_DATE) MONTH, CAR_ID, COUNT(*) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE EXTRACT(MONTH FROM START_DATE) IN (8, 9, 10) 
    GROUP BY CAR_ID
    HAVING COUNT(*) > 4
) AND 8 <= EXTRACT(MONTH FROM START_DATE) AND EXTRACT(MONTH FROM START_DATE) < 11
GROUP BY EXTRACT(MONTH FROM START_DATE), CAR_ID
HAVING COUNT(*) <> 0
ORDER BY MONTH, CAR_ID DESC;
SELECT TO_NUMBER(TO_CHAR(START_DATE, 'MM')) AS MONTH, a.CAR_ID, count(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY a JOIN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE TO_CHAR(START_DATE, 'YYYY-MM-DD') BETWEEN '2022-08-01' AND '2022-10-31'
    GROUP BY CAR_ID
    HAVING count(*) >= 5
) b ON a.CAR_ID = b.CAR_ID
WHERE TO_CHAR(START_DATE, 'YYYY-MM-DD') BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY TO_CHAR(START_DATE, 'MM'), a.CAR_ID
ORDER BY 1, 2 DESC

서칭쿼리_MYSQL

SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(HISTORY_ID) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
        SELECT CAR_ID
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
        WHERE (DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10')
        GROUP BY CAR_ID
        HAVING COUNT(CAR_ID) >= 5
    )
GROUP BY MONTH, CAR_ID
ORDER BY MONTH ASC, CAR_ID DESC;
profile
This is a velog that freely records the process I learn.

0개의 댓글