题解 | #网易云音乐推荐(网易校招笔试真题)#
网易云音乐推荐(网易校招笔试真题)
http://www.nowcoder.com/practice/048ed413ac0e4cf4a774b906fc87e0e7
不知不觉的一个思路:
- 先拉平成一个宽表,表 里面有关注人,被关注人,音乐id,音乐名称。
- 其次,需要完成剔除掉关注人自己已经喜欢的音乐单——采取的思路是在第一个步骤的时候,将用户人id加入,同时加入0作为mark
- 然后最后根据music进行去重,选取那些group by 最小值不等于1的进行排除,因为如果在自身的歌单里面,最小值为0.
select c.music_name
from
(select follower_id ,1 as mark
from follow as a
where a.user_id = 1
union all
select 1 as follower_id,0 as mark
) as a
left join music_likes as b
on a.follower_id=b.user_id
left join music as c
on b.music_id=c.id
group by c.music_name,c.id
having min(mark) = 1
order by c.id