by TigerStone [SQL Query] Oracle [2017.05.10 02:26:23]
SELECT A.IP, A.COUNTRY, A.CNT AS COUNT, A.RANK FROM( SELECT IP, COUNTRY, CNT, ROW_NUMBER() OVER (PARTITION BY IP ORDER BY CNT DESC) AS RANK FROM( SELECT IP, COUNTRY, COUNT(*) AS CNT FROM LOG WHERE LOG_TIME BETWEEN TO_DATE('2016/03/01 00:00', 'YYYY-MM-DD HH24:MI') AND TO_DATE('2016/03/07 23:59', 'YYYY-MM-DD HH24:MI') GROUP BY IP, COUNTRY ) ) A WHERE A.RANK <= 3 ORDER BY A.IP DESC, A.CNT DESC
위와 같은 쿼리를 작성하였습니다.
특정 IP가 조회한 게시물들의 국가 카테고리를 COUNT하여, 각 IP별로 COUNT가 높은 3개의 국가를 보여주는 쿼리입니다.
쿼리 실행 결과는 아래의 표입니다.
여기서, IP별로 COUNT의 SUM을 계산한 후, SUM의 내림차순으로 상위 5명만 잘라서 보여주고자 합니다.
그런데 도저히 어떻게 접근해야할지 모르겠네요...
쿼리 하나로 구현하기엔 무리가 있는걸까요?
이를 구현할 수 있는 쿼리를 어떻게 만들어야 할까요?
조언좀 해주시면 정말 감사하겠습니다..