计算方式对比

一般计算占比,比如转换率、留存率等,都是先分组求和再相除得到结果,但是在一定的条件下,可以直接使用AVG()求出百分比

比如,要求统计报名转化率,报名转化率公式为转化率=报名人数/浏览人数

在下面图中,两种颜色分别表示了不同的计算过程:

  • 淡橘色是第一种直接方法:分别求出浏览人数(7),报名人数(4),转化率=4/7=57%
  • 蓝色是使用平均函数AVG():直接对“是否报名”列求平均数,结果也为4/7=57%,其中满足报名条件的人数(4),总人数(7)。在这里插入图片描述

题目满足两个条件:

  1. 表格中有为唯一ID值,
  2. 有判断条件的列:在“是否报名”列中,只有0和1,1表示满足了条件(已经报名),0表示没有满足条件(没有报名)。

所以,可以直接使用AVG()函数计算条件列的占比结果。而在实际过程中,上述条件都可以通过聚合计算满足,比如通过if()函数构建一个判断列。

例一:计算转换率

举个简单栗子,在牛客直播转换率这个题目中,要求:统计每个科目的转换率(sign_rate(%),转化率=报名人数/浏览人数,结果保留两位小数)。(注:按照course_id升序排序)

已知课程表course_tb如下(其中course_id代表课程编号,course_name表示课程名称,course_datetime代表上课时间):
在这里插入图片描述
用户行为表behavior_tb如下(其中user_id表示用户编号、if_vw表示是否浏览、if_fav表示是否收藏、if_sign表示是否报名、course_id代表课程编号):
在这里插入图片描述

解法

select
b.course_id,
course_name,
round(avg(if_sign)*100,2)
from behavior_tb b
left join course_tb c on c.course_id=b.course_id
group by 1,2
order by course_id asc

例二:计算新用户占比

计算每天的日活数及新用户占比
在这里插入图片描述

  • 新用户占比=当天的新用户数÷当天活跃用户数(日活数)。
  • 如果in_time-进入时间out_time-离开时间跨天了,在两天里都记为该用户活跃过。
  • 新用户占比保留2位小数,结果按日期升序排序。

解法

select
dt
,count(1) dau
,round(avg(if(cnt=1,1,0)),2) as uv_new_ratio   #是新用户返回1, 不是新用户返回0
from
(
select
    uid,
    dt,
    row_number()over(partition by uid order by dt) as cnt # 判断是否为新用户
from
(#重新构造基础表格,将进入和离开时间放在同一列
select uid, date(in_time) as dt from tb_user_log
Union
select uid,date(out_time) as dt from tb_user_log) t1
) t2
group by 1
order by dt asc
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐