【问题标题】:Need help on MySQL DISTINCT+COUNT query需要有关 MySQL DISTINCT+COUNT 查询的帮助
【发布时间】:2011-04-23 08:52:06
【问题描述】:

我有一个名为“r”的表,在该表中我存储了 id、ip 和国家/地区。我正在运行这个查询:

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

我确实得到了带有列的行:"country";"number";"number"; 但是两个“counts()”都没有显示我想要显示的内容(每个国家/地区的原始/唯一 ips 计数),我不知道为什么。例如对于美国,我看到 >2000 个唯一 ips,但我在数据库中只有 500 个条目。我的查询有什么问题?

我想从数据库中检索的是包含列的行列表:国家 + 计算原始 ips + 计算唯一 ips。 (与每个国家/地区相关的计数),我的意思是检索不同国家/地区的列表并计算每个国家/地区的 ips(无需进行多次查询)。

【问题讨论】:

    标签: php mysql distinct


    【解决方案1】:

    您为什么需要在这里自我加入?在你在 sqlite 中拥有的东西的快速 n-dirty 设置中,我能够做到

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

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

    【讨论】:

      【解决方案2】:
      SELECT  r.country, count(r.ip), count(DISTINCT r.ip) 
      FROM `r`
      GROUP BY r.country
      

      【讨论】:

        【解决方案3】:

        类似的东西(完全未经测试):

        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 
        

        【讨论】:

        • 我想要每个国家的 IP 总数和 IPS 的唯一总数(从不全球)。现在将检查并尝试您的查询,谢谢。更新:看起来您的查询检索到我需要的数据,非常感谢。
        • 是的,我在写查询之前就明白了,但忘记删除文本了。顺便说一句,如果可行的话,我认为 RedFilter 的答案会更好。我不确定您是否可以在同一个查询中使用 count distinct 和 count 。
        猜你喜欢
        • 2013-09-16
        • 2011-04-18
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多