题解 | #各个视频的平均完播率#

各个视频的平均完播率

http://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753

求 2021年的 每个视频 完播率: (结束时间-开始时间)=duration的视频 / 总的视频 降序

select video_id,

   round(avg(if(timestampdiff(second,vl.start_time,vl.end_time) >= vi.duration,1,0)),3) as avg_comp_play_rate
   #round(count(if(timestampdiff(second,vl.start_time,vl.end_time) >= vi.duration,1,null)) / count(vl.video_id),3) as avg_comp_play_rate

from tb_user_video_log vl

join tb_video_info vi using(video_id)

where year(vl.start_time) = 2021

group by vl.video_id #vl.id

order by avg_comp_play_rate desc;

这题出现了五个错误:

1.起初分类的时候使用的是 vl.id 以为这样直接分类的是每个人的完成情况 其实写到这一步的时候忽略了起初要求的什么,所以才会导致这个错误

2.第四行的分母也使用错了count里面的量,当时使用的是vl.id和groupby 犯下的错误是同样的

3.视频完播率 起初如思路所示,写的是结束减开始的时间=duration,现在想来我觉得未必如此,如果用户倍速播放,或者他看到一半就暂停去刷评论了,再或者点开了该视频没有暂停就放下手机去干别的了,那该如何参考?

4.想先写count然后再写round的,但是因为count这段语句太长了,导致后面把这个条件给忘记了。

5.没有先看清题目时间差应该是second还是minute,导致起初求的是minute的差值

优化:就是直接用平均数函数avg来快速求完播率,而且题目也给了这个信息可以使用avg来求解了,因为as的就是avg_xxxxxx

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务