stackoverflow에 대한 SQL Top N 질문이 많이 있지만 상황과 일치하는 항목을 찾을 수없는 것 같습니다. 상위 n 개 쿼리에서 그룹화를 수행하고 싶습니다. 내 데이터는 이렇게 보입니다 (분명히 가짜 값으로).MySQL 상위 N 그룹화
MY_DATE IP_ADDRESS
1/1/09 999.999.999.999
1/1/09 999.999.999.999
1/1/09 999.999.999.998
... a lot more rows
테이블의 날짜 범위는 몇 개월을 다루며 월간 수천 개의 행을 포함합니다. 내가하고 싶은 일은 하나의 쿼리에서 매월 10 개의 IP 주소가 가장 자주 발생했는지 알려주는 것입니다. 나는 다음을 사용하여 단일 한 달 동안이 작업을 수행 할 수 있습니다
SELECT DATE_FORMAT(MY_DATE, '%b-%y') AS "MONTH", IP_ADDRESS, COUNT(*) AS HITS
FROM MY_DATA
WHERE DATE_FORMAT(MY_DATE, '%b-%y') = 'JAN-09'
GROUP BY DATE_FORMAT(MY_DATE, '%b-%y'), IP_ADDRESS
ORDER BY HITS DESC
LIMIT 10
는하지만 내가 정말 원하는 것은 데이터 세트의 모든 달 동안 상위 N을 볼 수있을 것입니다. 그것은 본질적으로 내가 지정한 where 절을 사용하는 것을 금지합니다. 물론, 그렇게하면 모든 달 동안 10 점까지 얻습니다. 내가 찾고있는 결과는 다음과 같아야합니다.
MONTH IP_ADDRESS COUNT(*)
JAN-09 999.999.999.999 200
JAN-09 999.999.999.998 150
... (8 more rows of January)
FEB-09 999.999.999.999 320
FEB-09 999.999.999.998 234
... (8 more rows of February)
MAR-09 999.999.999.999 440
... ETC.
이 작업을 MySQL로 수행 할 수 있습니까? 내가 부딪히는 장벽은 MySQL이 UNION에 포함 된 쿼리 문 안에서 ORDER BY를 허용하지 않는다는 것입니다. 도와 주셔서 감사합니다!
나중에이 달로 돌아와서 마침내 이것을 시도해 보았습니다. 고맙습니다! –