https://school.programmers.co.kr/learn/courses/30/lessons/151139
SELECT MONTH(START_DATE) AS MONTH,
CAR_ID,
COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY 1
HAVING COUNT(*)>4)
AND DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY 1,2
HAVING COUNT(*)>0
ORDER BY 1,2 DESC
조금 복잡한 코드가 됐다. MYSQL에도 IN을 사용할 수 있다는 것!
먼저 CAR_ID로 그룹화해서 총 렌탈 횟수가 5회 이상인 차의 ID를 뽑아내고, 그 ID에 해당하는 데이터들을 조회했다.
WHERE CAR_ID IN 서브쿼리
를 사용해 가장 큰 문제를 해결했다.
그리고 날짜 범위는 DATE_FORMAT에 BETWEEN을 사용해서 해결했다. 다른 방법으로는 DATE_FORMAT(START_DATE,'%Y%m') IN (202208,202209,202210)
이와같이 IN을 사용하는 방법도 있다.
근데 뭔가 서브 쿼리랑 본 쿼리 부분에서 겹치는 게 많아서 간단하게 할 수 있는 방법이 있을 것도 같은데 없나...
SELECT MONTH(START_DATE) AS MONTH,
CAR_ID,
COUNT(*) AS RECORDS
WHERE CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY 1 HAVING COUNT(*)>4) F
GROUP BY 1,2
아니 나는 서브쿼리에 alias(이름) 지정 안해주면 오류났었던 것 때문에 alias 지정해줬더니 이번엔 그것 때문에 오류가 났다!
뭔차이지??