프로그래머스_대여 횟수가 많은

어려워 보였고, 어려웠지만 그래도 풀 가치가 있는 문제였습니다.

CAR_ID 중에서 2022년 8월에서 10월 사이에 5회 이상 대여한 CAR_ID를 우선적으로 뽑아야겠다고 생각했습니다.

select CAR_ID
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where START_DATE >= '2022-08-01' and START_DATE <= '2022-10-31'
group by CAR_ID
having count(CAR_ID) >= 5

위와 같이 쉽게 구할 수 있었습니다.

이렇게 획득한 CAR_ID 하에서 실제로 8월에서 10월 사이에 빌린 칼럼을 추출할 수 있다.

이 두 가지 솔루션만으로도 이미 해답에 근접해 있습니다.

그러나 나는 여기서 조금 길을 잃었습니다.

이제 MONTH를 인쇄해야 하고 substr로 표현하려고 했습니다.

아니 근데 정렬할 때 문제의 예시처럼 정렬하지 않고 10월, 8월, 9월 순으로 정렬했다.

숫자가 아니라 문자열이기 때문이라고 생각하는데 그래서 10이 더 큰 문자열이라고 생각했습니다.

(정확한 이유를 아시는 분은 댓글로 알려주세요.)

그래서 대소문자 구분을 사용하여 정수 8, 9, 10을 각각 8월, 9월, 10월에 일치시킬까 생각했습니다.

MONTH라는 멋진 함수를 찾았습니다.

MONTH는 날짜 데이터의 월을 정수로 반환하는 함수입니다.

문제에서 주어진 월의 임대료가 0이면 결과에서 제외시키므로 ‘have’ 절을 이용하여 구현하였다.

select MONTH(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 START_DATE >= '2022-08-01' and START_DATE <= '2022-10-31'
    group by CAR_ID
    having count(CAR_ID) >= 5
) and (START_DATE >= '2022-08-01' and START_DATE <= '2022-10-31')
group by MONTH, CAR_ID
having RECORDS > 0
order by MONTH asc, CAR_ID desc