使用sum+ case when函数能就能解决,不过如果是count 配合case when比较容易出错

select user.video_id,
    round(sum(case when (end_time-start_time)>=duration then 1
             else 0 end )/count(*),3) as avg_comp_play_rate
from tb_user_video_log user join tb_video_info vid
on user.video_id=vid.video_id
where year(start_time)=2021
group by user.video_id 
order by avg_comp_play_rate desc