MySQL利用groupby汇总与参数循环法的不同统计方法实现

1. 人数分布情况

统计某段时间内活跃用户按天数统计的人数分布情况,分布没有方向,按月内最多天数统计分布
主要步骤:先按人对天数去重计数,然后再按天数对去重的人数计数,最后,按天数大小汇总统计

SELECT 
	SUM(IF(diffcdate=1,dd,0)) '[1,2)',
	SUM(IF(diffcdate=2,dd,0)) '[2,3)',
	SUM(IF(diffcdate=3,dd,0)) '[3,4)',
	SUM(IF(diffcdate=4,dd,0)) '[4,5)',
	SUM(IF(diffcdate=5,dd,0)) '[5,6)',
	SUM(IF(diffcdate=6,dd,0)) '[6,7)',
	SUM(IF(diffcdate=7,dd,0)) '[7,8)',
	SUM(IF(diffcdate=8,dd,0)) '[8,9)',
	SUM(IF(diffcdate=9,dd,0)) '[9,10)',
	SUM(IF(diffcdate>9,dd,0)) '[10,hi)',
	SUM(dd) 'TOTAL'
FROM ( 
	SELECT 
		diffcdate,COUNT(*) dd
	FROM(
		SELECT 
			uid, COUNT(DISTINCT date(createtime)) diffcdate
		FROM 
			coin_record
		GROUP BY uid
	) m1
	GROUP BY diffcdate
) m2

结果如下:
在这里插入图片描述

2. 累计人数分布情况

统计某段时间内活跃用户天数的累计人数分布情况,向天数少的方向累计的,本例主要用参数加循环的办法实现

SET @d=1; -- 某人活跃的第几天,默认是第一天
SET @uid=0; -- 当前统计人员uid
SET @change=99; -- uid参数,不是0就是新的uid

SELECT 
	SUM(IF(dd=1,1,0)) '[1,2)',
	SUM(IF(dd=2,1,0)) '[2,3)',
	SUM(IF(dd=3,1,0)) '[3,4)',
	SUM(IF(dd=4,1,0)) '[4,5)',
	SUM(IF(dd=5,1,0)) '[5,6)',
	SUM(IF(dd=6,1,0)) '[6,7)',
	SUM(IF(dd=7,1,0)) '[7,8)',
	SUM(IF(dd=8,1,0)) '[8,9)',
	SUM(IF(dd=9,1,0)) '[9,10)',
	SUM(IF(dd>9,1,0)) '[10,hi)',
	COUNT(DISTINCT uid) 'TOTAL'
FROM (
	SELECT
		@change:=if(@uid!=uid,@uid:=uid ,0) changetouid , -- 是否换人了,0未换人,否则@uid变成新的uid
		IF(@change=0,@d:=@d+1,@d:=1) dd , -- @change=0是没有换人,uid用户的活跃的天数要加1
		u1.uid,u1.cdate,u1.coin 
	FROM (
		SELECT 
			uid, date(createtime) cdate,sum(coin) coin 
		FROM 
			coin_record
		GROUP BY uid, date(createtime) 
		# ORDER BY uid, date(createtime)
	) u1
) m;

1)按人、天数汇总统计
在这里插入图片描述
2)对上述结果进行循环,对每一条记录判断是否换人了,未换人changetouid为0,dd为每人在本月活跃的第几个天数,存在一个新的天数即加1,若换人了changetouid为新的uid
在这里插入图片描述
3)最后对上述结果进行汇总,按dd的不同天数汇总,本例只统计某个月的10段范围的统计数,即,处在1天、2天、……到10+天的活跃人数分布,结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值