【场景】:播放进度

【分类】:字符串拼接、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