WITH t AS( SELECT DISTINCT month,song_name,song_id,COUNT(age) OVER (PARTITION BY month,song_name) AS play_pv FROM( SELECT month(a.fdate) AS month,b.age,c.song_name,c.singer_name,a.song_id FROM play_log AS a JOIN user_info AS b ON a.user_id = b.user_id JOIN song_info AS c ON a.song_id = c.song_id ) AS d WHERE age >= 18 AND age <= 25 AND singer_name = '周杰伦' ) SELECT * FROM( SELECT month,ROW_NUMBER() OVER (PARTITION BY month ORDER BY play_pv DESC,song_id ASC) AS ranking, song_name,play_pv FROM t ) AS e WHERE ranking <= 3 ORDER BY month ASC,ranking ASC
小白写的可以看看