题解 | #各个视频的平均完播率#
各个视频的平均完播率
https://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753
//思路: 1.先计算出总的播放次数(注意筛选条件是2021年) SELECT video_id,COUNT(video_id) FROM tb_user_video_log where year(start_time)=2021 GROUP BY video_id ; 2.计算出每个视频被播放了多少秒(同时也要注意筛选条件是2021) SELECT video_id,TIME_TO_SEC(TIMEDIFF(end_time,start_time)) as Btime FROM tb_user_video_log where year(start_time)=2021; 3.计算出每一个视频被完整播放完的次数 SELECT tb_video_info.video_id,sum(if(tb_video_info.duration<=T2.Btime,1,0)) as FinshClick FROM tb_video_info natural join (SELECT video_id,TIME_TO_SEC(TIMEDIFF(end_time,start_time)) as Btime FROM tb_user_video_log where year(start_time)=2021) as T2 GROUP BY tb_video_info.video_id; 4.计算平均完播率 SELECT T1.video_id, ROUND(FinshClick / ALLClick, 3) AS avg_comp_play_rate FROM ( SELECT video_id, COUNT(video_id) AS ALLClick FROM tb_user_video_log where year(start_time)=2021 GROUP BY video_id ) AS T1 NATURAL join ( SELECT tb_video_info.video_id, sum(if (tb_video_info.duration <= T2.Btime, 1, 0)) as FinshClick FROM tb_video_info natural join ( SELECT video_id, TIME_TO_SEC (TIMEDIFF (end_time, start_time)) as Btime FROM tb_user_video_log WHERE YEAR(start_time)=2021 ) as T2 GROUP BY tb_video_info.video_id ) AS T3 ORDER BY avg_comp_play_rate DESC;