5.mysql group by(不同的字段) 查询出来的数据不一样剖析

来源:互联网 发布:win telnet 端口 编辑:程序博客网 时间:2024/06/05 23:58
desc tb_pushlog_20151201;idint(10)NOPRIauto_incrementimeivarchar(40)NOMULimsivarchar(25)NOpushtimedatetimeNO0000-00-00 00:00:00ruleidint(11)YESMUL0channelidint(11)YES0cityidint(11)YES0nexttimeint(11)YES0retentionint(11)YES0urlvarchar(200)YESbackupurlvarchar(200)YEStypechar(1)YESresultnumint(2)YESMUL99resultstrvarchar(400)YES

表tb_pushlog_20151201是统计一天内对用户push广告的情况:

select count(DISTINCT imei) from tb_pushlog_20151201 where  ruleid = 510 ;-- 457205select sum(v.sums) from (select count(DISTINCT imei) as sums from tb_pushlog_20151201 where  ruleid = 510 group by channelid ) as v; -- 669319select 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条记录。


结论:在做数据报表时,根据需求要对不同的字段进行分组,统计出来的数据和 有可能 不一样,这样就要知道如果去分析。

0 0
原创粉丝点击