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;
查询结果如下: 可以看到不同频道每一天的人均的会员值。
