sql语句,两次分组查询

yicikou 2005-03-15 02:10:38
SELECT `siteid` , `date` , count( DISTINCT ip )
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 在三月份里的总数。
...全文
954 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yicikou 2005-03-16
  • 打赏
  • 举报
回复
再综合一下这个统计条件。

同一天同一个ip的访问算一次
同一天同一小时同一个ip访问不同的网站,第一个访问的网站有效,其它的视为无效。
统计一个月各个网站的ip访问量
yicikou 2005-03-16
  • 打赏
  • 举报
回复
再请教 sql语句:

现在又多一个条件:就是同一ip每天最多只能访问24个不同的网站,也就是说同一小时访问不同网站只能算一次。
helloyou0 2005-03-16
  • 打赏
  • 举报
回复
这个group by (ip,日期,小时)不就可以了吗?
yicikou 2005-03-15
  • 打赏
  • 举报
回复
赞!!!!
helloyou0 2005-03-15
  • 打赏
  • 举报
回复
嗯,你的统计先按日分组,同一ip算一次,
实际上就是把同一天同一IP的访问算一次,
然后统计一个月的访问。
所以,distinct ip,date就是这个作用了,
yicikou 2005-03-15
  • 打赏
  • 举报
回复

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 )
fcuandy 2005-03-15
  • 打赏
  • 举报
回复
select siteCount=sum(count(distinct ip)),siteid from table where month([date])=3 and year([date])=2005 group by siteid
xuzuning 2005-03-15
  • 打赏
  • 举报
回复
不可能的,除非你第一次就错了!!!
不做子分组就是全部了
helloyou0 2005-03-15
  • 打赏
  • 举报
回复
试试这样的结果?

SELECT siteid, date, count( DISTINCT ip, date )
FROM t1
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid
helloyou0 2005-03-15
  • 打赏
  • 举报
回复
昏了,不相干
michelle0618 2005-03-15
  • 打赏
  • 举报
回复
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`


总的就出来了
helloyou0 2005-03-15
  • 打赏
  • 举报
回复

这样出来的结果是不是应该是一样的?

SELECT siteid , date , count( * )
FROM rawlogodd
WHERE date >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY siteid , date , ip
yicikou 2005-03-15
  • 打赏
  • 举报
回复
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
yicikou 2005-03-15
  • 打赏
  • 举报
回复
版本不支持子查询
xuzuning 2005-03-15
  • 打赏
  • 举报
回复
再执行一次
SELECT `siteid` , `date` , count( DISTINCT ip )
FROM rawlogodd
WHERE `date` >= '2005-3-1'
AND date <= '2005-3-31'
GROUP BY `siteid`
helloyou0 2005-03-15
  • 打赏
  • 举报
回复
试试这个,如果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
yicikou 2005-03-15
  • 打赏
  • 举报
回复
我也想过这种方法,但是觉得太费时,能不能用一句话解决
xuzuning 2005-03-15
  • 打赏
  • 举报
回复
循环相加,当siteid改变时起用新计数器

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧