问题:计算2021年里有播放记录的每个视频的完播率(结果保留三位小数),并按完播率降序排序 注:视频完播率是指完成播放次数占总播放次数的比例。简单起见,结束观看时间与开始播放时间的差>=视频时长时,视为完成播放。 思路: 1、条件是2021年用year(start_time)截取年; 2、每个视频需要按照视频id分组统计group by video_id; 3、视频完播率=视频完播总次数/总播放次数=sum(if(end_time-start_time>=duration,1,0))/count(start_time); 4、保留三位小数用round(视频完播率,3); 5、视频完播率按降序排序用order by 视频完播率 desc; 6、此问题需求用户-视频互动表tb_user_video_log为主表需要显示全,所以用left jion 。 SELECT a.video_id , round(sum(if(end_time - start_time >= duration, 1, 0))/count(start_time ),3) as 视频完播率 FROM tb_user_video_log a LEFT JOIN tb_video_info b on a.video_id = b. video_id WHERE year(start_time) = 2021 GROUP BY a.video_id ORDER BY 视频完播率 DESC;