select cid, pv, rk from(
select cid,
    max(release_date) as release_date,
    round(count(*)*1.0,3) as pv,
    row_number() over (order by count(*) desc, max(release_date) desc) as rk
from play_record_tb
left join course_info_tb
    using(cid)
group by cid, uid
having count(*) >1 
) t
where rk < 4
order by rk