这道题关键在于要考虑到播放时长大于视频时长的情况
with t as (
select t1.tag,avg(case when TIMESTAMPDIFF(SECOND,t2.start_time,t2.end_time) < t1.duration
then TIMESTAMPDIFF(SECOND,t2.start_time,t2.end_time)/t1.duration
else 1
end) as avg_play_progress
from tb_video_info t1
join tb_user_video_log t2
on t1.video_id = t2.video_id
group by t1.tag
)
select tag,concat(cast(round(avg_play_progress*100,2) as CHAR),'%')
from t
where avg_play_progress>0.6
order by avg_play_progress desc