select cid, pv, rk from 
(
select cid, round(cast(pv as float),3) as pv,
row_number() over(order by pv desc,release_date desc) as rk from 
(
select p.cid,release_date,
count(score) as pv
from play_record_tb as p
left join course_info_tb as c on p.cid = c.cid
group by p.uid,p.cid,release_date
having count(score)> 1
) as t1
order by rk 
) as t2
where rk < 4