我如何计算每天在我的网站上有多少个唯一地址? 我的表看起来像这样:
行名: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
这只给我一些计数为一的行。
答案 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