题解 | #平均播放进度大于60%的视频类别#
平均播放进度大于60%的视频类别
https://www.nowcoder.com/practice/c60242566ad94bc29959de0cdc6d95ef
SELECT tag, CONCAT (t1.avg_play_progress, "%") from ( select tag, round( avg( if ( timestampdiff (second, u.start_time, u.end_time) >= v.duration, 1, timestampdiff (SECOND, u.start_time, u.end_time) / v.duration ) ) * 100, 2 ) as avg_play_progress from tb_user_video_log u LEFT JOIN tb_video_info v on u.video_id = v.video_id GROUP BY v.tag HAVING avg_play_progress >60 ORDER BY avg_play_progress desc ) t1;
#第一步:from 连接两个表,以video_id连接
#第二步:group by :按照tag进行聚合
#第二步:select:计算平均完播率,先计算每个视频的完播率,如果时长大于duration的直接赋值为1,如果小于,那么直接处于duration,最后计算每个tag的平均
#第三步:对完播率进行乘以100,保证后面的百分位数输出准确
#第四步:HAVING挑选出完播率大于60的,进行输出
#第五步:排序按照播放进度降序排序
#第六步:从上面的查询中,使用concat函数,连接两个数值类型,进行输出