select
        cid,
        pv,
        time_len
from (
    select
        prt.cid,
        avg(score) as avg_score,
        count(if(date(prt.start_time) < date_add(cit.release_date,interval 1 week),prt.start_time,null)) as pv,
        sum(timestampdiff(minute,if(date(prt.start_time) < date_add(cit.release_date,interval 1 week),prt.start_time,0),if(date(prt.end_time) < date_add(cit.release_date,interval 1 week),prt.end_time,0))) as time_len
    from 
            play_record_tb as prt
    left join 
            course_info_tb as cit
    on 
            prt.cid = cit.cid
    group by 
            prt.cid 
)a
where 
        avg_score >= 3
order by 
        pv desc,
        time_len desc
limit 3