MySQL电商数据查询分析实战一

随着数字化时代的不断发展,人们越来越倾向于在网上进行购物,因此电商零售业也日益成熟。而作为一个电商零售人,在做完运营销售之后的总结是非常重要的,那么如何总结提升以形成整个营销产业链的良性闭环呢?我认为对营销时产生的数据进行统计分析是很重要的。

这里以某电商平台用户记录数据为例,通过MySQL语言,借助Navicat平台进行搭建分析。

数据具体信息如下:包括了daily_active_user 日活跃用户表、dim_user_level 用户会员等级表、dim_channel 渠道维度表等等。

以daily_active_user 日活跃用户表为例,它包含了以下信息:

在了解了基本表信息之后,我们才能对数据进行查询分析操作

1.首先我们可以查询出月活跃天数分布和基础数据量级 SQL代码如下:

select 
ds,count(1) as num
from daily_active_user
group by ds
order by ds
limit 1000;

查询结果如下: 可以看到一共30条数据,分别记录了每一个日期ds的活跃记录数,即ds1 20190901有254条记录

2.接着我们查询找出低活/中活/高活用户数为目标,从数据中找出我们想要的数据 具体低活/中活/高活用户数要求如下:

低活用户:月活跃天数 < 10 天 低活用户:月活跃天数 >= 10 天且 < 20 天,且时长 10 分钟以上的天数 < 5 天 中活用户:月活跃天数 >= 10 天且 < 20 天,且时长 10 分钟以上的天数 >= 5 天 中活用户:月活跃天数 >= 20 天,且时长30 分钟以上的天数 < 10 天 高活用户:月活跃天数 >= 20 天,且时长30 分钟以上的天数 >=10 天

具体的SQL代码如下

select 
      case when active_days<10 then 低活
		   when active_days>=10 and active_days<20 and durations_10days<5 then 低活
		   when active_days>=10 and active_days<20 and durations_10days>=5 then 中活
		   when active_days>=20 and durations_30days<10  then 中活
		   when active_days>=20 and durations_30days>=10 then 高活
			end as user_type,count(distinct uid) as usernum
from 
 (select uid,count(distinct ds) as active_days,
		     count(distinct if(duration>600,ds,null) as durations_10days,
			 count(distinct if(duration>1800,ds,null) as durations_30days,   #得到每个用户uid的活跃天数和活跃时长
        from daily_active_user
        group by uid) a
 group by
	   case when active_days<10 then 低活
		    when active_days>=10 and active_days<20 and durations_10days<5 then 低活
		    when active_days>=10 and active_days<20 and durations_10days>=5 then 中活
		    when active_days>=20 and durations_30days<10  then 中活
			when active_days>=20 and durations_30days>=10 then 高活
			end 
order by field(user_type,低活,中活,高活);

查询结果如下:

3.接着我们引入dim_user_level 用户会员等级表和dim_channel 渠道维度表,它们所包含的信息如下: 会员等级表 渠道维度表 结合上面的daily_active_user 日活跃用户表,我们可以进一步查询不同渠道的人均会员值 具体代码如下:

select  ds,channel_name,
        count(distinct uid) as usernum,
        avg(user_current_value) as avg_user_value
from
        (select t1.ds,t1.uid,
        t2.user_value-t1.value_gap as user_current_value,  #查询计算出表一表二结合后的用户uid 现有积分值  !重点
        t3.channel_name
     from(select  ds,uid,channel,user_level,value_gap  #表一daily_active_user 查询字段 !!首要
		      from daily_active_user) t1
   left join (
              select user_level,user_value      #表二dim_user_level 查询字段 !其次
		      from dim_user_level) t2
	          on t1.user_level+1=t2.user_level    #表一表二连接条件
		
   left join (
             select channel,channel_name  #再次连接表三dim_channel 
		     from dim_channel) t3
	         on t1.channel=t3.channel
) t
	 
  group by  ds,channel_name;

查询结果如下: 可以看到不同频道每一天的人均的会员值。

经验分享 程序员 微信小程序 职场和发展