#左边是用户视频表,右边是信息表,匹配 # 计算每一个视频的播放进度 (时间差)/ duration # 注意,播放时长大于duration时长时,要计算为100%,这里容易出错,用case when,如果小于,就是播放时长除以duration,如果大于等于,就是1 with t as ( select l.id, l.video_id, i.tag, (case when timestampdiff(second,l.start_time,l.end_time) <= i.duration then timestampdiff(second,l.start_time,l.end_time) / i.duration else 1 end )as progress from tb_user_video_log l join tb_video_info i on l.video_id = i.video_id ) # 按照视频tag分类,计算每个类别视频的平均播放进度 # 只输出结果大于60%的 select tag, concat(round(100 * avg(progress),2),"%") as avg_play_progress from t group by tag having avg(progress) > 0.6 order by avg_play_progress desc