이제 대문자로 치는 것도 귀찮다..
SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(CAR_ID) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN 8 AND 10
GROUP BY CAR_ID HAVING COUNT(*)>4)
GROUP BY MONTH, CAR_ID
HAVING MONTH BETWEEN 8 AND 10
ORDER BY MONTH ASC, CAR_ID DESC
이번 문제는 쵸큼 어려웠다.. 왜인지 머릿속에서 정리가 안되는 기분..
심지어 언젠가 풀다 만 문제여서 풀려져있는 그 모양에 약간 얽매여있었던 것 같다
몬가 뭐에 씌인 그런 상태.. 결국 걍 어제 고대로 커밋하고 오늘 다시 보고 풀었는데
뭔가 왜 그렇게 어렵게 생각했는지 알 수 없는 노릇..
서브쿼리를 써서 row를 여러개 뽑아내려고 한 건데 여러 개 나온거랑 하나랑 비교해서 에러나고.. 제정신이 아니었던 것 같아?
무튼간 그래도 오래 걸린 문제니까 정리해보자면
문제:
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.
이런 문제였는데 대해서 이전의 문장을 서브쿼리로 걸러주면 됐다
그리고 group by도 월별 자동차 id별이라서 두가지로 그룹핑 해줘야한다
마지막 줄의 특정 월의 총 대여횟수가 0인 경우 결과에서 제외할 것
이라는 조건은 car_id가 모든 월별로 다 출력되는 게 아니라서 신경쓰지 않아도 됐다 🤗
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES IN (SELECT MAX(FAVORITES) FROM REST_INFO
GROUP BY FOOD_TYPE)
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
-> 이게 정답
처음에 아래 오답처럼 favorites의 최댓값을 가진 food_type으로 그룹핑을 해서 그 아이디를 비교대조해보면 된다고 생각했는데 그게 아니라 최댓값을 섭쿼리에서 뽑아서 그 값으로 비교대조를 해야했다
⭐⭐⭐
결국 최댓값을 가진 food_type으로 그룹핑은 불가능한 거 같다 그러니까 잘못된 결과가 나오지 않았을까?
틀렸습니다!
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES FROM REST_INFO WHERE REST_ID IN (SELECT REST_ID FROM REST_INFO GROUP BY FOOD_TYPE HAVING MAX(FAVORITES)) GROUP BY FOOD_TYPE ORDER BY FOOD_TYPE DESC