select ct.cid, t2.pv, row_number() over ( order by pv desc, release_date desc ) as rk from course_info_tb ct join ( select cid, sum(visit_count) as pv from ( select uid, cid, count(uid) as visit_count from play_record_tb group by uid, cid having visit_count > 1 ) t1 group by cid ) t2 using (cid) order by rk limit 3