
SQL 공부중 입니다. ✍✍✍
문제
https://school.programmers.co.kr/learn/courses/30/lessons/151139
풀이
SELECT MONTH(START_DATE) "MONTH", CAR_ID , COUNT(HiSTORY_ID) "RECORDS"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN "2022-08-01" AND "2022-10-31"
GROUP BY CAR_ID
HAVING COUNT(HISTORY_ID) >= 5)
AND START_DATE BETWEEN "2022-08-01" AND "2022-10-31"
GROUP BY MONTH(START_DATE), CAR_ID
ORDER BY MONTH(START_DATE) ASC, CAR_ID DESC;
서브쿼리, 2중 GROUP BY 등 매우 복잡한 문제였습니다. 먼저 서브쿼리를 통해 2022-08 ~ 2022-10까지 총 대여횟수가 5회 이상인 CAR_ID를 구하였습니다. 또한 다시 '해당 기간' (2022-08 ~ 2022-10)에 해당하는 동안의 월별, 자동차별 대여 횟수라고 언급했기 때문에 다시
AND START_DATE BETWEEN "2022-08-01" AND "2022-10-31" 구문을 넣어주어야 했습니다.
이 부분이 가장 헷갈려 풀이 시간이 생각보다 길어졌습니다.🐹🐹🐹
저의 풀이 이외에
SELECT
MONTH(START_DATE) AS 'MONTH',
CAR_ID,
COUNT(HISTORY_ID) AS 'RECORDS'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE YEAR(START_DATE) = '2022'
AND MONTH(START_DATE) BETWEEN '8' AND '10'
GROUP BY CAR_ID
HAVING COUNT(HISTORY_ID) >= 5
AND MONTH(START_DATE) BETWEEN '8' AND '10'
)
GROUP BY MONTH, CAR_ID
HAVING RECORDS > 0
ORDER BY MONTH ASC, CAR_ID DESC
서브쿼리 안에서 GROUP BY 이후 HAVING 절에 두가지 조건을 한번에 설정하여 해결한 풀이를 볼 수 있었습니다. 🐻🐻🐻
감사합니다.