select cid, round(cast(count(*) as float), 3) as pv,
row_number() over(order by count(*) desc, release_date desc) as rk
from play_record_tb
join course_info_tb using(cid)
group by 1, uid, release_date
having count(*) > 1
limit 3

用 limit 可以少用一个子查询

直接把 count 写在窗口函数里面,又可以省一个子查询

用 cast 把整数数值强转成浮点数或者双精度(float 或者 double),就可以设置小数位数了