FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
得到的结果是这样的
siteid date count( DISTINCT ip )
0 2005-03-01 1
0 2005-03-02 1
0 2005-03-03 1
0 2005-03-04 1
3 2005-03-01 434
3 2005-03-02 466
3 2005-03-03 378
怎样再统计各个siteid 在三月份里的总数。
18 个解决方案
#1
循环相加,当siteid改变时起用新计数器
#2
我也想过这种方法,但是觉得太费时,能不能用一句话解决
#3
试试这个,如果mysql版本不低的话可以
SELECT siteid, sum( a )
FROM
(SELECT siteid, date, count( DISTINCT ip ) a
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
) b
GROUP BY siteid
SELECT siteid, sum( a )
FROM
(SELECT siteid, date, count( DISTINCT ip ) a
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
) b
GROUP BY siteid
#4
再执行一次
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
#5
版本不支持子查询
#6
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
这个不行,只能得到这样的数据
siteid date count( DISTINCT ip )
0 2005-03-01 1
3 2005-03-01 2237
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
这个不行,只能得到这样的数据
siteid date count( DISTINCT ip )
0 2005-03-01 1
3 2005-03-01 2237
#7
这样出来的结果是不是应该是一样的?
SELECT siteid , date , count( * )
FROM rawlogodd
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid , date , ip
#8
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
改成
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
总的就出来了
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
改成
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
总的就出来了
#9
昏了,不相干
#10
试试这样的结果?
SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
#11
不可能的,除非你第一次就错了!!!
不做子分组就是全部了
不做子分组就是全部了
#12
select siteCount=sum(count(distinct ip)),siteid from table where month([date])=3 and year([date])=2005 group by siteid
#13
SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
这个对
:)
可是想不明白count( DISTINCT ip, date )
#14
嗯,你的统计先按日分组,同一ip算一次,
实际上就是把同一天同一IP的访问算一次,
然后统计一个月的访问。
所以,distinct ip,date就是这个作用了,
实际上就是把同一天同一IP的访问算一次,
然后统计一个月的访问。
所以,distinct ip,date就是这个作用了,
#15
赞!!!!
#16
再请教 sql语句:
现在又多一个条件:就是同一ip每天最多只能访问24个不同的网站,也就是说同一小时访问不同网站只能算一次。
现在又多一个条件:就是同一ip每天最多只能访问24个不同的网站,也就是说同一小时访问不同网站只能算一次。
#17
再综合一下这个统计条件。
同一天同一个ip的访问算一次
同一天同一小时同一个ip访问不同的网站,第一个访问的网站有效,其它的视为无效。
统计一个月各个网站的ip访问量
同一天同一个ip的访问算一次
同一天同一小时同一个ip访问不同的网站,第一个访问的网站有效,其它的视为无效。
统计一个月各个网站的ip访问量
#18
这个group by (ip,日期,小时)不就可以了吗?
#1
循环相加,当siteid改变时起用新计数器
#2
我也想过这种方法,但是觉得太费时,能不能用一句话解决
#3
试试这个,如果mysql版本不低的话可以
SELECT siteid, sum( a )
FROM
(SELECT siteid, date, count( DISTINCT ip ) a
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
) b
GROUP BY siteid
SELECT siteid, sum( a )
FROM
(SELECT siteid, date, count( DISTINCT ip ) a
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
) b
GROUP BY siteid
#4
再执行一次
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
#5
版本不支持子查询
#6
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
这个不行,只能得到这样的数据
siteid date count( DISTINCT ip )
0 2005-03-01 1
3 2005-03-01 2237
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
这个不行,只能得到这样的数据
siteid date count( DISTINCT ip )
0 2005-03-01 1
3 2005-03-01 2237
#7
这样出来的结果是不是应该是一样的?
SELECT siteid , date , count( * )
FROM rawlogodd
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid , date , ip
#8
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
改成
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
总的就出来了
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid` , `date`
改成
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
总的就出来了
#9
昏了,不相干
#10
试试这样的结果?
SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
#11
不可能的,除非你第一次就错了!!!
不做子分组就是全部了
不做子分组就是全部了
#12
select siteCount=sum(count(distinct ip)),siteid from table where month([date])=3 and year([date])=2005 group by siteid
#13
SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
这个对
:)
可是想不明白count( DISTINCT ip, date )
#14
嗯,你的统计先按日分组,同一ip算一次,
实际上就是把同一天同一IP的访问算一次,
然后统计一个月的访问。
所以,distinct ip,date就是这个作用了,
实际上就是把同一天同一IP的访问算一次,
然后统计一个月的访问。
所以,distinct ip,date就是这个作用了,
#15
赞!!!!
#16
再请教 sql语句:
现在又多一个条件:就是同一ip每天最多只能访问24个不同的网站,也就是说同一小时访问不同网站只能算一次。
现在又多一个条件:就是同一ip每天最多只能访问24个不同的网站,也就是说同一小时访问不同网站只能算一次。
#17
再综合一下这个统计条件。
同一天同一个ip的访问算一次
同一天同一小时同一个ip访问不同的网站,第一个访问的网站有效,其它的视为无效。
统计一个月各个网站的ip访问量
同一天同一个ip的访问算一次
同一天同一小时同一个ip访问不同的网站,第一个访问的网站有效,其它的视为无效。
统计一个月各个网站的ip访问量
#18
这个group by (ip,日期,小时)不就可以了吗?