题解 | #各个视频的平均完播率#
各个视频的平均完播率
https://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753
题目思路:
有两个表 tb_user_video_log和tb_video_info.
1 观察两个表的结构可知 : uid与viedo_id是一对多的关系 ; video_id与start_time是多对多关系 ; video_id与end_time是多对多关系 ; video_id与duration是多对一关系
2 分析题目-计算2021年里有播放记录的每个视频的完播率每个视频的完播率,可知:
2021年: 用start_time
有播放记录(总播放次数) : 统计 tb_user_video_log表每个video_id的行数
完播率: 完成播放次/总播放次数=(结束观看时间-开始播放时间>=视频时长时)/总播放次数
上代码:
selectvideo_id,
round(sum(panduan)/count(*),3) as avg_comp_play_rate
from
(select
a.video_id,
if(timestampdiff(second,start_time,end_time)>=duration,1,0) as panduan
from
tb_user_video_log a
left join tb_video_info b
on a.video_id=b.video_id
where
year(start_time)='2021'
) aa
group by
video_id
order by
avg_comp_play_rate desc