WITH t1 AS (  
    SELECT  
        month(fdate) AS month,  
        DATE_FORMAT(fdate, '%Y') AS year, 
        song_id,   
        COUNT(user_id) AS play_pv  
    FROM play_log pl 
    where user_id in 
        (SELECT user_id
        FROM user_info  
        WHERE age BETWEEN 18 AND 25 )
    GROUP BY month, year, song_id 
    HAVING year = 2022 --查符合年龄的用户听的所有歌曲及歌曲每月被听的频次
),  
t2 AS (  
    SELECT song_id, song_name, singer_name  
    FROM song_info  
    WHERE singer_name = '周杰伦'  --查周杰伦的所有歌曲
),  
t3 AS (  
    SELECT  
        t1.month,  
        t2.song_id,  
        t2.song_name,  
        t1.play_pv  
    FROM 
    t1 JOIN t2 ON t1.song_id = t2.song_id  
)    --链接成1张表
SELECT b.month,b.ranking,b.song_name,b.play_pv from  
    (select
    t3.month,  
    ROW_NUMBER() OVER (PARTITION BY t3.month ORDER BY t3.play_pv DESC) AS ranking,
    t3.song_id,  
    t3.song_name,  
    t3.play_pv 
FROM t3)b  --按频次每月排名
    where b.ranking<=3
    ORDER BY b.month asc,b.ranking asc,b.song_id asc,b.play_pv DESC