-- 逻辑拆解:筛选条件-18-25岁,2022年,播放次数top3,周杰伦;分组对象:每个月
-- 思路就是首先将所有符合条件的内容筛选出来(按照逻辑拆解去做),并且求出播放次数+按照播放次数去排名,最后取前三名
WITH table_1 AS(
    SELECT 
        MONTH(t2.fdate) AS month,
        COUNT(t2.song_id) play_pv,
        t3.song_name,
        ROW_NUMBER() OVER(partition by MONTH(t2.fdate) order by COUNT(t2.song_id) DESC) ranking
    FROM user_info t1
    INNER JOIN play_log t2
    ON t1.user_id = t2.user_id
    INNER JOIN song_info t3
    ON t2.song_id = t3.song_id
    WHERE t1.age BETWEEN '18' AND '25'
    AND t2.fdate BETWEEN '2022-01-01' AND '2022-12-31'
    AND t3.singer_name = '周杰伦'
    GROUP BY MONTH(t2.fdate),t3.song_name
)
SELECT 
    t1.month,
    t1.ranking,
    t1.song_name,
    t1.play_pv
FROM table_1 t1
WHERE t1.ranking <= 3