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

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条记录。

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值