HiveSQL 面试题 - 向用户推荐朋友收藏的商品

文章介绍了一个从好友关系表和收藏表中查询用户未收藏但其朋友已收藏的商品,以进行个性化推荐的问题。首先,通过SQL联接查询获取朋友收藏的商品,接着通过集合操作找出用户自己未收藏的商品,最后得到推荐列表。

1 需求

现需要请向所有用户推荐其朋友收藏但是用户自己未收藏的商品,请从好友关系表(friendship_info)和收藏表(favor_info)中查询出应向哪位用户推荐哪些商品。

  • 好友关系表 friendship_info
user1_id(用户1 id) user2_id(用户2 id)
101 1010
101 108
101 106
  • 收藏表 favor_info
user_id(用户id) sku_id(商品id) create_date(收藏日期)
101 3 2021-09-23
101 12 2021-09-23
101 6 2021-09-25
  • 期望结果
user_id (用户id) sku_id (应向该用户推荐的商品id)
101 2
101 4
101 7
101 9
101 8
101 11
101 1

2 实现

  • 思路

初看这个需求还是有些绕的,而且实现过程中需要注意很多细节否则就会导致出错。

主思路是统计出每个用户自己收藏的商品和自己的朋友收藏的商品,然后从中取出朋友收藏的且自己未收藏的商品,用来给自己推荐。需要注意好友关系表中的关系是双向的,与收藏表进行关联时,关联字段的不同拿出来的数据也是不同的。

  • 实现

1 查出每个人的朋友都收藏了哪些商品,注意关联字段 user2_id,表示查询朋友收藏的商品

SELECT *
from friendship_info
     inner join
     favor_info
     o
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值