(프로그래머스) LV.3 대여 횟수가 많은 자동차들의 월별 대여 횟수

chaechae·2023년 1월 17일
0

코딩테스트(SQL) 

목록 보기
2/22
post-thumbnail

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

문제 )
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

# 8월~10월 까지 기간중 - 조건(1)
# 총 대여 횟수가 5회 이상 자동차들을 - 조건(2)
# 월별 자동차 ID 별 총 대여 횟수로 (컬럼명 : RECORDS)
# 월 오름차순, 자동차 ID 내림차순 - 조건(3)

SELECT MONTH, CAR_ID, RECORDS
FROM ( SELECT MONTH(START_DATE) AS MONTH
            ,CAR_ID
            ,COUNT(CAR_ID) as RECORDS
            ,SUM(COUNT(CAR_ID)) OVER(PARTITION BY CAR_ID) AS SUMRECORDS
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
        WHERE start_date BETWEEN '2022-08-01 00:00:00' AND '2022-10-31 23:59:59' #(1)
        GROUP BY MONTH, CAR_ID) A 
WHERE SUMRECORDS >= 5 #(2)
ORDER BY MONTH, CAR_ID DESC #(3)

회고🤦‍♂️

이 문제의 핵심은 조건(2)를 어떻게 처리하느냐 인듯 합니다. 월(MONTH)별 그리고 자동차ID(CAR_ID)별로 자동차를 몇번 대여 했는지는 해당 컬럼을 GROUP BY 한후 COUNT(CAR_ID)를 이용해 구할 수 있습니다. 하지만 조건(2)를 만족하기 위해서는 "총 대여수"를 알아야 했기 때문에 저는 윈도우함수를 이용하여 CAR_ID를 파티션으로 나눈 뒤 SUMRECORDS 라는 일종의 필터를 만들었습니다. SUMRECORDS가 5 이상인 값들만 뽑은 뒤 조건에 맞는 컬럼들만 제출하면 정답입니다.

※ SUMRECORDS가 추가된 TABLE (일부) 입니다.
👉 예를들어, 28번 자동차는 8월에는 3번, 8월~10월 기간에는 총 5번 대여 되었다 라고 해석 할 수 있습니다.

MONTHCAR_IDRECORDSSUMRECORDS
82835
82756
825511
82338
81915
...
profile
게임 혹은 다양한 컨텐츠가 있는 곳을 좋아합니다. 시리즈를 참고하시면 편하게 글을 보실 수 있습니다🫠

0개의 댓글