题解 | 每个月Top3的周杰伦歌曲

每个月Top3的周杰伦歌曲

https://www.nowcoder.com/practice/4ab6d198ea8447fe9b6a1cad1f671503

-- 题目忘了说明相同play_pv, 按song_id升序。
-- 如果提交报错,可能是因为存在排名听歌数量相同但是排名不一样的歌曲,因此需要在窗口函数的order by部分按照song_id再升序排列即可.
-- 思路:
-- 连接表
-- 筛选条件年份、年龄、周杰伦
-- group by song_id, month,song_id(因为窗口函数中用到song_id排序。所以分组时要加上song_id)
-- count(*) 
-- row_number()over(partition by month(date) order by cnt)

with t1 as(
    select 
        month(fdate) month
        ,row_number()over(partition by month(fdate) order by count(*)desc, p.song_id) ranking
        ,song_name
        ,count(*) play_pv
    from play_log p
    left join song_info s
    on p.song_id = s.song_id
    left join user_info i
    on p.user_id = i.user_id
    where year(fdate) = 2022 
    and age between 18 and 25
    and singer_name = '周杰伦'
    group by song_name,month,p.song_id
)

select 
    month
    ,ranking
    ,song_name
    ,play_pv
from t1
where ranking <= 3

全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务