select tuvl.video_id,
cast(avg(if(timestampdiff(second,start_time,end_time)>=duration,1,0)) as decimal(10,3)) as avg_comp_play_rate from 
tb_user_video_log tuvl 
left join tb_video_info tvi
on tuvl.video_id = tvi.video_id
where year(start_time) = '2021'
group by tuvl.video_id
order by avg_comp_play_rate desc;

思路:

根据要求,求得的是完播率,完播率求解方式已告知,就简单的用时间进行相减就好。

需要注意点:

1、2021年,筛选条件一定要注意;

2、对于结果完成后,还要注意按照完播率进行排序;

3、计算时间差 可以使用TIMESTAMPDIFF(unit, start_datetime, end_datetime)

  • unit:指定返回结果的单位,可以是以下值之一:MICROSECOND(微秒)、SECOND(秒)、MINUTE(分钟)、HOUR(小时)、DAY(天)、WEEK(周)、MONTH(月)或 YEAR(年)。
  • start_datetime:指定的起始日期或时间戳。
  • end_datetime:指定的结束日期或时间戳。