此题共包含两张表:

表1:用户-视频互动表tb_user_video_log

表2:短视频信息表tb_video_info

要解决的问题:

计算各类视频的平均播放进度,将进度大于60%的类别输出。当播放时长大于视频时长时,播放进度均记为100%。结果保留两位小数,并按播放进度倒序排序。

解题思路:

  1. 计算各类视频的平均播放进度,注意如播放时长大于duration要按duration计算,乘100保留2位小数
  2. 找出平均播放时长大于60的播放记录
  3. 按播放进度倒序排序
  4. 用concat将60变为60%

注意

  1. 播放时长大于视频时长时按100%计算,否则会报错
  2. 由于%是利用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