题解 | #平均播放进度大于60%的视频类别#
平均播放进度大于60%的视频类别
https://www.nowcoder.com/practice/c60242566ad94bc29959de0cdc6d95ef
select b.tag, CONCAT(round(avg(if(timestampdiff(second,start_time,end_time)>duration,1,timestampdiff(second,start_time,end_time)/duration))*100,2),'%') #CONCAT(round(sum(if(timestampdiff(second,start_time,end_time)>duration,1,timestampdiff(second,start_time,end_time)/duration))*100/count(start_time),2),'%') as avg_play_progress from tb_user_video_log a join tb_video_info b on a.video_id=b.video_id group by b.tag having avg_play_progress>60 order by avg_play_progress desc
易错点:平均播放进度大于60%,这个是个巨大的易错点,那就是0.6和60%不能进行比较的,需要乘以100,使用concat加上百分号,就可以和60进行比较了。开始有个疑惑,就是到底要不要用右连接,因为视频没有播放过,那不就是播放率为0,如果是使用left或者inner就不用担心会存在0的情况。但是题目的源数据应该是没有这种情况出现,所以用那种连接都可以。
解题思路:计算各类视频的平均播放进度,将进度大于60%的类别输出,即要进行group by分组,再进行having筛选,给出一个平均播放进度公式。平均播放进度就是每个视频的播放进度/所有视频个数(包括重复的视频)