desc tb_pushlog_20151201;
id int(10) NO PRI auto_increment
imei varchar(40) NO MUL
imsi varchar(25) NO
pushtime datetime NO 0000-00-00 00:00:00
ruleid int(11) YES MUL 0
channelid int(11) YES 0
cityid int(11) YES 0
nexttime int(11) YES 0
retention int(11) YES 0
url varchar(200) YES
backupurl varchar(200) YES
type char(1) YES
resultnum int(2) YES MUL 99
resultstr varchar(400) YES
表tb_pushlog_20151201是统计一天内对用户push广告的情况:
select count(DISTINCT imei) from tb_pushlog_20151201 where ruleid = 510 ;-- 457205
select sum(v.sums) from (select count(DISTINCT imei) as sums from tb_pushlog_20151201 where ruleid = 510 group by channelid ) as v; -- 669319
select sum(v.sums) from (select count(DISTINCT imei) as sums from tb_pushlog_20151201 where ruleid = 510 group by cityid ) as v; -- < 669319
第一条sql语句查询广告词为510的去重imei之后的用户数为457205条记录v1。
第二条sql语句,根据渠道号进行分组,同样是查询广告词为510 去重imei之后的用户数 669319条记录v2。
第三条sql语句,根据国家进行分组,同样是查询广告词为510 去重imei之后的用户数v3。但是结果是 有v1<v3<v2 因为有可能这样的记录:
ffffffff-8831-1ffd-f323-b97d1c49c871 100051 china
ffffffff-8831-1ffd-f323-b97d1c49c871 100021 china
ffffffff-8831-1ffd-f323-b97d1c49c871 100256 china
ffffffff-8831-1ffd-f323-b97d1c49c871 100256 en
这样的结果是非常有可能的(根据实际查询结果),因此第1种情况,这4条记录只算1条记录,第2种情况对channelid分组,查询出来的有4条记录,第3种情况对国家分组,查询出来的是2条记录。结论:在做数据报表时,根据需求要对不同的字段进行分组,统计出来的数据和 有可能 不一样,这样就要知道如果去分析。