题解 | #各个视频的平均完播率#
各个视频的平均完播率
https://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753
SELECT tb_user_video_log.video_id, ROUND(COUNT( IF((end_time - start_time) >= duration, 1, null) ) / COUNT(1) , 3) AS avg_comp_play_rate FROM tb_user_video_log, tb_video_info WHERE tb_user_video_log.video_id = tb_video_info.video_id AND YEAR(start_time) = 2021 -- 过滤出2021年的数据 GROUP BY video_id ORDER BY avg_comp_play_rate DESC; -- 按照完播量降序排序
这是我在`SQL大厂面试真题`专题解决的第一道题目,真的很开心。
计算每个视频的完播率,需要通过`video_id`连接两张表,并以`video_id`进行分组聚合操作。
统计每个视频的播放数使用 COUNT(1)即可,要统计完成播放的记录,可以先使用IF()函数判断每条记录是否完成播放,如果完成播放就返回1,否则返回null, 随后使用COUNT()统计1出现的次数,即为完播记录数。注意COUNT()函数会统计非NULL值出现的次数。