当前位置: 首页 > article >正文

Leetcode 1892. 页面推荐Ⅱ

1.题目基本信息

1.1.题目描述

表: Friendship

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| user1_id | int |

| user2_id | int |

±--------------±--------+

(user1_id,user2_id) 是 Friendship 表的主键(具有唯一值的列的组合)。

该表的每一行表示用户user1_id和user2_id是好友。

表: Likes

±------------±--------+

| Column Name | Type |

±------------±--------+

| user_id | int |

| page_id | int |

±------------±--------+

(user_id,page_id) 是 Likes 表的主键(具有唯一值的列)。

该表的每一行表示user_id喜欢page_id。

您正在为一个社交媒体网站实施一个页面推荐系统。如果页面被user_id的 至少一个朋友喜欢 ,而 不被user_id喜欢 ,你的系统将 推荐 一个页面到user_id。

编写一个解决方案来查找针对每个用户的所有可能的 页面建议 。每个建议应该在结果表中显示为一行,包含以下列:

user_id: 系统向其提出建议的用户的ID。

page_id: 推荐为 user_id 的页面ID。.

friends_likes: user_id 对应 page_id 的好友数。

以 任意顺序 返回结果表。

1.2.题目地址

https://leetcode.cn/problems/page-recommendations-ii/description/

2.解题方法

2.1.解题思路

请参考步骤部分

2.2.解题步骤

第一步,将user2_id和user1_id互换位置union一份到Friendship表中。

第二步,将user2_id的收藏的page_id连接到FriendShip表上,然后过滤出表中(usr1_id,page_id)不在Likes表中的记录,得到子表t2。

第三步,根据(user1_id,page_id)从t1表中分组聚合统计记录数量。

3.解题代码

sql代码

# Write your MySQL query statement below
# 思路:第一步,将user2_id和user1_id互换位置union一份到Friendship表中。第二步,将user2_id的收藏的page_id连接到FriendShip表上,然后过滤出表中(usr1_id,page_id)不在Likes表中的记录,得到子表t2;第三步,根据(user1_id,page_id)从t1表中分组聚合统计记录数量
SELECT t1.user1_id AS user_id, page_id, COUNT(*) AS friends_likes
FROM (SELECT user1_id, user2_id FROM FriendshipUNION ALLSELECT user2_id AS user1_id, user1_id AS user2_id FROM Friendship
) AS t1 LEFT JOIN Likes AS l ON t1.user2_id = l.user_id
WHERE NOT EXISTS (SELECT * FROM Likes WHERE user_id = user1_id AND page_id = l.page_id
)
GROUP BY t1.user1_id, page_id

4.执行结果

http://www.lryc.cn/news/2403220.html

相关文章:

  • 进程——环境变量及程序地址空间
  • (4-point Likert scale)4 点李克特量表是什么
  • 亚矩阵云手机实测体验:稳定流畅背后的技术逻辑​
  • VR视频制作有哪些流程?
  • NodeJS全栈WEB3面试题——P2智能合约与 Solidity
  • 某水表量每15分钟一报,然后某天示数清0了,重新报示值了 ,如何写sql 计算每日水量
  • Ubuntu 系统部署 MySQL 入门篇
  • 【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码
  • 大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患
  • vue3 按钮级别权限控制
  • vue3子组件获取并修改父组件的值
  • 【Redis】Cluster集群
  • 黑马Java面试笔记之 微服务篇(SpringCloud)
  • CLIP多模态大模型的优势及其在边缘计算中的应用
  • 基于STM32语音识别柔光台灯
  • 基于PSO粒子群优化的VMD-GRU时间序列预测算法matlab仿真
  • 探索未知惊喜,盲盒抽卡机小程序系统开发新启航
  • 基于开源AI大模型与AI智能名片的S2B2C商城小程序源码优化:企业成本管理与获客留存的新范式
  • Python----目标检测(YOLO简介)
  • mysql+keepalived
  • Profinet 协议 IO-Link 主站网关(三格电子)
  • Ubuntu22.04 安装 Miniconda3
  • Hubstudio浏览器如何使用Loongproxy?
  • 硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
  • ComfyUI 对图片进行放大的不同方法
  • Elasticsearch最新入门教程
  • 第16节 Node.js 文件系统
  • 【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析
  • jenkins结合gitlab实现CI
  • SQL进阶之旅 Day 17:大数据量查询优化策略