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