题解 | 每个月Top3的周杰伦歌曲
每个月Top3的周杰伦歌曲
https://www.nowcoder.com/practice/4ab6d198ea8447fe9b6a1cad1f671503
-- 问题提炼:18-25岁用户 在2022年 周杰伦的歌曲 每个月播放次数top 3 -- ORDER BY COUNT(s.song_name) DESC: -- 对当前分区(即当前月份)内的每首歌曲的播放记录数量进行统计,播放次数多的歌曲会排在前面 WITH t AS ( SELECT MONTH(p.fdate) AS `month` ,ROW_NUMBER() OVER(PARTITION BY MONTH(p.fdate) ORDER BY COUNT(s.song_name) DESC, p.song_id ASC) AS ranking ,s.song_name ,COUNT(s.song_name) AS play_pv FROM play_log p LEFT JOIN song_info s ON p.song_id = s.song_id LEFT JOIN user_info u ON p.user_id = u.user_id WHERE YEAR(p.fdate) = 2022 -- 在2022年 AND u.age BETWEEN 18 AND 25 -- 18-25岁用户 AND s.singer_name = '周杰伦' -- 周杰伦的歌曲 GROUP BY MONTH(p.fdate), s.song_name, p.song_id -- 窗口函数中用到song_id,所以分组时要加上 ) SELECT * FROM t WHERE ranking <= 3 -- 每个月播放次数top 3 ;