select cid,
concat(pv,'.000') pv,
row_number() over(order by pv desc) rk
from (
    select p.cid,release_date,
    count(uid) pv
    from course_info_tb c right join play_record_tb p on c.cid=p.cid
    group by p.cid,p.uid,release_date
    having count(p.uid)>1 
    order by pv desc,release_date desc
) as r
order by rk
limit 3

先在子查询中把需要的重复次数以及cid查出来,并按pv排好顺序

再在主查询中对子查询结果进行排名

应注意本来子查询就是一行一列为一组,因此在排名时应该对全部进行排名,不应再用PARTITION by进行分组排名