select *
from 
(
	select 
	month(fdate) month,
	row_number()over(partition by month(fdate) order by count(song_name) desc,s.song_id asc) ranking,
	song_name,
	count(song_name) play_pv
	from play_log p join song_info s
	on p.song_id=s.song_id
	join user_info u
	on p.user_id=u.user_id
	where year(fdate)=2022
    and age between 18 and 25
	and singer_name='周杰伦'
	group by month(fdate),song_name,s.song_id
) ra
where ranking<=3

重点:row_number()中使用的song_id 必须在分组时就添加 否则报错 看题解学到的