①先用timestampdiff算出视频播放时间,再与t_v_i表进行左连接(左连接是因为题目要的是有播放记录的数据,故把播放记录表放在左侧即可,其他没有播放记录的视频就不会连接进来); ②根据视频播放时间是否>=duration来判断、计算完播率。 select video_id, round(count(if(finish_video>=duration,1,null))/count(video_id),3) avg_comp_play_rate from (select video_id, start_time, timestampdiff(second,start_time,end_time) as finish_video from tb_user_video_log) as tb1 left join tb_video_info using(video_id) where year(start_time)=2021 group by video_id order by avg_comp_play_rate desc