select month,rn as ranking, song_name, cnt as play_pv
from
(
    select month(fdate) as month, play.song_id, count(1) as cnt, song_name,
           row_number() over (partition by month(fdate) order by count(1) desc, play.song_id) as rn
    from play_log play
    join user_info user on play.user_id=user.user_id
    join song_info song on play.song_id=song.song_id
    where age>=18 and age<=25 and year(fdate)=2022 and singer_name='周杰伦'
    group by month(fdate), play.song_id, song_name
) temp
where rn<=3