2010-11-20 4 views
0

나는 방문 테이블 (visit_table) 구조를 가지고 :MySQL - 다른 쿼리의 결과로 GROUP BY하는 방법?

  • ID를
  • IP_ 주소
  • 타임 스탬프

및 IP에 대한 국가 이름 가진 테이블 (country_table가) 범위

  • ID
  • begin_IP IP 범위)
  • end_IP (IP 범위의 단부)
  • begin_num (begin_IP의 수치 적 등가, 즉 INET_ATON (begin_IP))
  • END_NUM
  • COUNTRY_CODE의 시작 (예를 들면 US)의 라인을 따라
  • COUNTRY_NAME
    (http://www.maxmind.com/app/csv 기준)
  • 내가 MySQL은 5.0.67 사용하고 있습니다 및 국가 방문의 수를 반환하는 쿼리를 작성하고 싶습니다

, 그래서 뭔가 :

SELECT country.table.country_name, 
     count(distinct visit_table.IP_address) 
    FROM country_table, visit_table 
    WHERE country_name = (SELECT country_name 
          FROM country_table 
          WHERE INET_ATON(visits.IP_address) >= begin_num 
          AND INET_ATON(visits.IP_Address) <= end_num 
          LIMIT 0,1) 
GROUP BY country_table.country_name 

는 내가 뭔가를 잘못하고 있어요 확신하지만 해결 방법을 모른다 - 가입 또는 BY 문은 SELECT 또는 GROUP과 함께 일을하고 어떤 종류의? 어떤 포인터를 환영합니다!

+0

당신은 부속의 형태로 GROUP BY 절에 SELECT 문을 쓸 수 있다고 생각합니다. 그건 오라클에서 작동합니다, 어쩌면 그것은 MySQL에서도 작동합니다. 누군가 이것을 확인할 수 있습니까? – Falcon

답변

1

예 당신은 가입하려는 :

SELECT country_table.country_name, count(distinct visit_table.IP_address) 
FROM country_table 
RIGHT JOIN visit_table ON visit_table.id=country_table.id  
GROUP BY country_table.country_name 
3

사용 :

SELECT c.country_name, 
     COUNT(DISTINCT v.IP_address) 
    FROM COUNTRY_TABLE c 
    JOIN VISIT_TABLE v ON v.country_name = c.country_name 
    WHERE INET_ATON(v.IP_Address) BETWEEN begin_num AND end_num 
GROUP BY c.country_name 

해당 IP 범위에 대한 국가가 없다면, 당신은 아무것도 얻을 수 없습니다. 그러나 범위에서 반환 된 국가가 두 개 이상인 경우이를 처리하기 위해 쿼리를 업데이트해야합니다. 당신이 그것을 위해 촬영 된 IP 주소가 없습니다 수있는 국가를 원하는 경우

사용 :

SELECT c.country_name, 
      COUNT(DISTINCT v.IP_address) 
    FROM COUNTRY_TABLE c 
LEFT JOIN VISIT_TABLE v ON v.country_name = c.country_name 
    WHERE INET_ATON(v.IP_Address) BETWEEN begin_num AND end_num 
GROUP BY c.country_name 
+0

c.country_code별로 그룹이 더 빨라지겠습니까? – Pentium10

+0

@ Pentium10 : 값을 저장하기 위해 바이트를 덜 사용하는 데이터 형식으로 그룹화하거나 조인하는 것이 더 잘 수행되어야합니다. 인덱스가 고려 될 수 있지만 INSERT/UPDATE/DELETE 쿼리에 부정적인 영향을줍니다 ... –

관련 문제