最近遇到一个关于sql的维度统计问题,要求统计各时间段内不同类型的浏览器的活跃人数,并计算各时间段内活跃用户总数。听起来十分简单,但是深究下来发现,同一个用户某时间段内会点击多次,而且可能是使用了不同的浏览器来进行点击,所以这里就涉及到一个浏览器维度内的去重和一个时间段维度内的去重。如下:
仔细思考,对表中数据进行如上统计时,浏览器维度统计要求同一个用户内部去重(同一个浏览器),而时间维度的总数统计要求对同一个用户去重(分属于不同浏览器),但是最终的结果都要再按照时间维度进行最终统计。
所以将浏览器维度的统计与活跃总数的统计拆为两条sql查询,最终通过对日期字段的关联查询实现上述结果。
我们假设表中有下列数据:
1. 浏览器维度统计
select
times,
sum(if(browser_type='Google',count,0)) as Google,
sum(if(browser_type='IE',count,0)) as IE,
sum(if(browser_type='Other',count,0)) as Other
from
(select
count