본문 바로가기
SQL

대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 - 그룹바이

by hoshi03 2024. 12. 10.

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

 

• 풀이

 

1. 8월~10월 중 대여횟수가 5회 이상인 car_id를 구한다

		select car_id
                from CAR_RENTAL_COMPANY_RENTAL_HISTORY 
                WHERE TO_CHAR(START_DATE,'YYYY-MM') 
                BETWEEN '2022-08' AND '2022-10'
                GROUP BY CAR_ID
                HAVING COUNT(car_id) >= 5

 

2. 안에서 구해진건 car_id 뿐이고 전체 그룹쿼리에서는 다시 한번 위처럼 8~10월 데이터만 거르기 위해

    where 조건으로 다시한번 8~10월 조건을 걸고 그룹바이 한다

SELECT TO_CHAR(START_DATE,'FMMM') MONTH, CAR_ID, COUNT(CAR_ID) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE CAR_ID IN(
                select car_id
                from CAR_RENTAL_COMPANY_RENTAL_HISTORY 
                WHERE TO_CHAR(START_DATE,'YYYY-MM') 
                BETWEEN '2022-08' AND '2022-10'
                GROUP BY CAR_ID
                HAVING COUNT(car_id) >= 5
               )
AND  
TO_CHAR(START_DATE, 'YYYY-MM-DD') BETWEEN '2022-08-01' AND '2022-10-31'
group by to_char(start_date, 'FMMM'), car_id
ORDER BY TO_NUMBER(TO_CHAR(START_DATE, 'FMMM')), CAR_ID DESC;

 

월을 표현하는 month는 01,02... 형태가 아닌 1,2.. 형태로 나와야 하기에

FMMM으로 자릿수를 채워서 1,2,3.. 으로 나오게 만들었다

 

order by 조건에 to_char로 문자열로 변환한 1,2,3 으로 넣으면 제대로 정렬이 안되서 TO_NUMBER로 한번 더 싸줬다