我有一个访问表(visit_table),结构:
和表格(country_table),其中包含IP范围的国家/地区名称
我正在使用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
我很确定我做错了但不知道如何修复 - 某种JOIN或用SELECT或GROUP BY语句做某事?欢迎任何指示!
答案 0 :(得分: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
答案 1 :(得分: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