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