with t as (
select t1.video_id
    ,count(case when timestampdiff(SECOND,t1.start_time,t1.end_time) >= t2.duration
            then 1
           end) as bfwc
    ,count(1) as bf
  from tb_user_video_log t1 
left join tb_video_info t2
    on t1.video_id = t2.video_id
where year(t1.start_time) = 2021
group by t1.video_id
    )
select video_id,round(bfwc/bf,3) as avg_comp_play_rate from t 
order by round(bfwc/bf,3) desc;