select cid, count(*) as pv, floor(sum(tl)) as time_len from ( select cid, timestampdiff(second, start_time, end_time) / 60 as tl from play_record_tb join course_info_tb using (cid) where date(start_time) < release_date + 7 ) as t where cid in ( select cid from play_record_tb group by cid having avg(score) >= 3 ) group by cid order by pv DESC,time_len DESC limit 3 ;
答案其实是错的,播放时长的展示单位可以是分钟甚至也可以是小时,但是统计精度明明可以精确到秒,它却在timestampdiff函数中直接用minute进行统计,这其实是会导致结果产生明显误差的,想象一下A视频的用户都是看到59秒关闭,而B视频的用户都是看到1秒关闭,两者播放次数相同,实际播放时间也相同,但是按照答案的算法就会出现B用户排名高于A视频的情况。我这里无奈为了过题,强行加了floor函数