题解 | #网易云音乐推荐(网易校招笔试真题)#

网易云音乐推荐(网易校招笔试真题)

https://www.nowcoder.com/practice/048ed413ac0e4cf4a774b906fc87e0e7?tpId=375&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj

这道题目要求我们为用户推荐其关注的人喜欢的音乐。我们要做的事情如下:

1. 确定总体问题

我们需要为用户ID为1的用户推荐其关注的人喜欢的音乐,排除用户自己已经喜欢的音乐,并按音乐ID升序排列,返回的结果中不包含重复项。

2. 分析关键问题

  • 找出用户关注的人:从follow表中找出用户ID为1关注的用户。
  • 获取关注者喜欢的音乐:从music_likes表中找出这些关注者喜欢的音乐。
  • 排除用户自己喜欢的音乐:排除用户ID为1自己已经喜欢的音乐。
  • 获取音乐名称:从music表中获取音乐名称。
  • 排序输出:按音乐ID升序排列。

3. 解决每个关键问题的代码及讲解

步骤1:找出用户关注的人

我们从follow表中找出用户ID为1关注的用户,然后通过链接music_likes表以寻找所关注人喜欢的音乐:

JOIN follow f ON ml.user_id = f.follower_id
WHERE f.user_id = 1
  • JOIN follow f ON ml.user_id = f.follower_id:通过被关注者ID连接。
步骤2:获取关注者喜欢的音乐

music_likes表中找出这些关注者喜欢的音乐:

JOIN music m ON ml.music_id = m.id
  • JOIN music m ON ml.music_id = m.id:通过音乐ID连接,获取关注者喜欢的音乐。
步骤3:排除用户自己喜欢的音乐

排除用户ID为1自己已经喜欢的音乐:

AND ml.music_id NOT IN (
    SELECT music_id
    FROM music_likes
    WHERE user_id = 1
)
  • ml.music_id NOT IN (...):排除用户ID为1自己已经喜欢的音乐。
步骤4:获取音乐名称

music表中获取音乐名称:

SELECT DISTINCT m.id, m.music_name
  • SELECT DISTINCT m.id, m.music_name:获取音乐ID和名称,并去重。
步骤5:排序输出

按音乐ID升序排列:

ORDER BY id

完整代码

SELECT music_name
FROM (
    SELECT DISTINCT m.id, m.music_name
    FROM music_likes ml
    JOIN follow f ON ml.user_id = f.follower_id
    JOIN music m ON ml.music_id = m.id
    WHERE f.user_id = 1
    AND ml.music_id NOT IN (
        SELECT music_id
        FROM music_likes
        WHERE user_id = 1
    )
) AS subquery
ORDER BY id;
全部评论

相关推荐

学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
昨天 17:00
武汉大学 Java
6月了还有点击就送的offer吗😭,投麻了😢
叫我阿东就行:这个bg,也还没找到理想的工作吗?好难,好焦虑
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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