2010-10-10 39 views
0

我有一个名为“r”的表,里面的表我存储了id,ip和country。我正在运行此查询:在MySQL DISTINCT + COUNT查询上需要帮助

SELECT r.country, count(rr.ip), count(DISTINCT rr.ip) 
FROM `r` 
LEFT JOIN r rr 
ON r.country = rr.country 
GROUP BY r.country 

我确实得到列的行:“国家”;“数字”;“数字”; 但是“counts()”没有显示我希望显示的内容(每个国家的原始/唯一Iips计数),我不知道为什么。例如,对于美国,我看到> 2000个独特的ips,但在数据库中只有500个条目。我的查询出了什么问题?

我想从数据库中检索的是包含列的行的列表:countries + count raw ips + count unique ips。 (计数与每个国家有关),我的意思是检索不同国家的清单并对每个国家进行计数(无需执行多个查询)。

回答

1
SELECT r.country, count(r.ip), count(DISTINCT r.ip) 
FROM `r` 
GROUP BY r.country 
0

喜欢的东西(没有经过测试):

SELECT 
    r.country, 
    count(r.ip), 
    (SELECT COUNT(DISTINCT rr.ip) from r rr where rr.country = r.country) 
FROM 
    r r 
GROUP BY 
    r.country 
+0

我想要IP的总数和每个国家(从不全局)IPS的总UNIQUE数量。将立即检查并尝试您的查询,谢谢。 更新:看起来你的查询检索我需要的数据,非常感谢。 – gtilx 2010-10-10 03:39:59

+0

是的,我在编写查询之前就明白了,但忘记删除文本。我认为RedFilter的答案更好,顺便说一句,如果它有效。我不确定您是否可以在同一个查询中使用不同的计数。 – 2010-10-10 03:42:16

0

为什么你需要在这里自加入?在一个快速ñ肮脏的设置你有什么在sqlite我只能做

SELECT country, count(ip), count(DISTINCT ip) FROM r GROUP BY country 

...我得到了预期的结果。