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
'[프로그래머스] SQL > 오답 노트' 카테고리의 다른 글
[lv3] 대장균의 크기에 따라 분류하기 2 (0) | 2024.10.18 |
---|---|
[lv2] 자동차 평균 대여 기간 구하기 (1) | 2024.10.09 |
[lv3] 업그레이드 할 수 없는 아이템 구하기 (1) | 2024.10.05 |
[lv2] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.10.05 |
[lv3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (1) | 2024.10.05 |