select pt.cid cid ,count(*) pv ,sum(timestampdiff(minute, start_time, end_time)) time_len from play_record_tb pt join course_info_tb ct on pt.cid = ct.cid where timestampdiff(day, release_date, date(start_time)) <= 7 group by cid having avg(score) >= 3 order by pv desc,time_len desc limit 3