如何计算每天具有不同IP地址的行?

时间:2012-03-12 13:44:12

标签: mysql

我如何计算每天在我的网站上有多少个唯一地址? 我的表看起来像这样:

  

行名:id,name,entity,ip_address,date

     

1,“Baldur”,“EntityA”,“85.221.18.251”,“2012-01-09 17:32:52”   2,“Baldur”,“EntityB”,“85.221.18.251”,“2012-01-09 17:32:57”   3,“Baldur”,“EntityB”,“85.221.18.252”,“2012-01-09 17:33:01”   4,“Baldur”,“EntityA”,“85.221.18.253”,“2012-01-10 17:33:12”   5,“Mango”,“EntityA”,“85.221.18.257”,“2012-01-10 17:32:52”   6,“Baldur”,“EntityB”,“85.221.18.251”,“2012-01-10 17:32:57”   7,“Mango”,“EntityB”,“85.221.18.253”,“2012-01-11 17:33:01”   8,“芒果”,“实体A”,“85.221.18.251”,“2012-01-11 17:33:12”   9,“Mango”,“EntityA”,“85.221.18.253”,“2012-01-11 17:32:52”   10,“Baldur”,“EntityB”,“85.221.18.255”,“2012-01-11 17:32:57”   11,“Mango”,“EntityB”,“85.221.18.254”,“2012-01-11 17:33:01”   12,“芒果”,“实体A”,“85.221.18.251”,“2012-01-12 17:33:12”

我正在思考这些问题:

SELECT date, COUNT(ip)
FROM mytable
GROUP BY date

这只给我一些计数为一的行。

3 个答案:

答案 0 :(得分:7)

您不是按日期分组(即每天一个条目),而是按实际时间戳分组,在您的情况下,这个时间戳会缩短到一秒。您必须应用date函数从中提取实际日期。

另一方面,添加DISTINCT关键字以实际计算不同的ips并忽略重复的条目。

SELECT DATE( `date` ), COUNT( DISTINCT ip_address )
  FROM mytable
  GROUP BY DATE( `date` )

答案 1 :(得分:2)

您只得到1的计数,因为大多数日期值基本上都是唯一的,因为它们也有时间组件。因此,您的原始语句尝试按完整日期时间进行分组,但通常每秒的点击次数不会很多。

使用函数DATE()删除时间部分,只获取日期部分,并在DISTINCT中添加COUNT(),以便每天只获取唯一的IP。

SELECT 
  DATE(`date`) AS ipdate, 
  COUNT(DISTINCT ip) 
FROM mytable
GROUP BY ipdate

要获取每天的总(非唯一)点击次数,请忽略DISTINCT

SELECT 
  DATE(`date`) AS ipdate, 
  COUNT(ip) 
FROM mytable
GROUP BY ipdate

答案 2 :(得分:0)

尝试:

SELECT DATE(date), COUNT(ip) FROM mytable GROUP BY DATE(date),ip