[프로그래머스] SQL/오답 노트

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

SH3542 2024. 10. 4. 19:27

 

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

 

1. DATE가 실제 날짜를 벗어나는 경우, 처리가 다르다.

SELECT DATE('2022-10-32')
=> NULL
SELECT DATE('2022-10-00')
=> 2022-09-30 00:00:00

 

2. START_DATE >= DATE('2022-08-01') AND END_DATE <= DATE('2022-10-31') 구문은 틀렸다.

대여일이 기준이므로,   START_DATE >= DATE('2022-08-01') AND START_DATE <= DATE('2022-10-31') 가 되어야 한다.

 

3. 월 별 그룹 테이블을 만드는 아이디어를 떠올리지 못했다. (SUBSTING을 이용하면 처리가 난해했다.)

MySQL에서는 DATE를 파싱하는 YEAR(), MONTH(), DAY()등의 함수를 제공한다.

 

4. GROUP BY는 다중 그룹화를 제공한다. 이를 까먹어서 2번의 그룹화를 위한 서브쿼리를 생각하느라 시간을 엄청 많이 썼다.

 

수정

SELECT MONTH(START_DATE) MONTH, CAR_ID, COUNT(HISTORY_ID) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE >= DATE('2022-08-01') AND START_DATE <= DATE('2022-10-31')
    AND CAR_ID IN (SELECT CAR_ID
                    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                    WHERE START_DATE >= DATE('2022-08-01') AND START_DATE <= DATE('2022-10-31')
                    GROUP BY CAR_ID
                    HAVING COUNT(CAR_ID) >= 5)
GROUP BY MONTH, CAR_ID
HAVING RECORDS > 0
ORDER BY MONTH ASC, CAR_ID DESC