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

每个月Top3的周杰伦歌曲

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

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

第二次刷 又错了

1)row_number() over (partition by month(p.fdate) order by count(p.song_id) desc,s.song_id

order by 后未加s.song_id,这里是题目少了条件,出现了歌曲同名,但不同id的情况

2)group by month(p.fdate),s.song_name,s.song_id

group by 后未加s.song_name,s.song_id,加s.song_name是因为要统计每首歌的累计情况,加s.song_id是因为之前的第一个错误中order by 要加s.song_id,因为如果 s.song_id 是 song_info 表的主键,且 s.song_name 依赖 s.song_id(即同一歌曲名可能对应不同版本或不同歌曲 ID),则即使 s.song_name 已出现在 GROUP BY 中,仍需添加 s.song_id 来确保分组的唯一性

全部评论

相关推荐

深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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