【场景】:播放进度
【分类】:字符串拼接、concat、日期函数
分析思路
难点:
1.百分比处理
(1)统计每条视频的播放时间
- [使用]:timestampdifftime(second,start_time,end_time)
(2)利用if函数计算每条视频的播放率,再利用avg()函数计算各类视频的平均完播率
找到进度大于60%的类别
-
[条件]:avg(if(times <= d,times/d*100,100)) > 60
-
[使用]:concat(round(avg(if(times <= d,times/d*100,100)),2),'%')
扩展
前往查看:***********
求解代码
方法一:
with 子句
#统计每条视频的播放时间
with main as(
select
tag,
timestampdiff(second,start_time,end_time) as times,
duration
from tb_user_video_log
join tb_video_info ti using(video_id)
)
#利用if函数计算每条视频的播放率,再利用avg()函数计算各类视频的平均完播率
select
tag,
concat(round(avg(if(times <= duration,times/duration*100,100)),2),'%') as avg_play_progress
from main
group by tag having avg(if(times <= duration,times/duration*100,100)) > 60
order by avg_play_progress desc
方法二:
from子查询
#利用if函数计算每条视频的播放率,再利用avg()函数计算各类视频的平均完播率
select
tag,
concat(round(avg(if(times <= duration,times/duration*100,100)),2),'%') as avg_play_progress
from(
#统计每条视频的播放时间
select
tag,
timestampdiff(second,start_time,end_time) as times,
duration
from tb_user_video_log
join tb_video_info ti using(video_id)
) main
group by tag having avg(if(times <= duration,times/duration*100,100)) > 60
order by avg_play_progress desc