此题共包含两张表:
表1:用户-视频互动表tb_user_video_log
表2:短视频信息表tb_video_info
要解决的问题:
计算各类视频的平均播放进度,将进度大于60%的类别输出。当播放时长大于视频时长时,播放进度均记为100%。结果保留两位小数,并按播放进度倒序排序。
解题思路:
- 计算各类视频的平均播放进度,注意如播放时长大于duration要按duration计算,乘100保留2位小数
- 找出平均播放时长大于60的播放记录
- 按播放进度倒序排序
- 用concat将60变为60%
注意
- 播放时长大于视频时长时按100%计算,否则会报错
- 由于%是利用concat函数连接得到,所以判断条件应为avg_play_progress > 60,而不是60%
select tag, concat(avg_play_progress,'%') avg_play_progress
from(
SELECT tag,
ROUND(avg(if(TIMESTAMPDIFF(SECOND,start_time,end_time) / duration > duration, 1,
TIMESTAMPDIFF(SECOND,start_time,end_time) / duration))*100 ,2) avg_play_progress
from tb_user_video_log a
left join tb_video_info b
on a.video_id = b.video_id
GROUP BY tag
having avg_play_progress > 60
ORDER BY avg_play_progress DESC
) t1