返回介绍

solution / 1800-1899 / 1892.Page Recommendations II / README

发布于 2024-06-17 01:03:13 字数 3453 浏览 0 评论 0 收藏 0

1892. 页面推荐 Ⅱ

English Version

题目描述

表: 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:

输入:
Friendship 表:
+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1    | 2    |
| 1    | 3    |
| 1    | 4    |
| 2    | 3    |
| 2    | 4    |
| 2    | 5    |
| 6    | 1    |
+----------+----------+
Likes 表:
+---------+---------+
| user_id | page_id |
+---------+---------+
| 1     | 88    |
| 2     | 23    |
| 3     | 24    |
| 4     | 56    |
| 5     | 11    |
| 6     | 33    |
| 2     | 77    |
| 3     | 77    |
| 6     | 88    |
+---------+---------+
输出:
+---------+---------+---------------+
| user_id | page_id | friends_likes |
+---------+---------+---------------+
| 1     | 77    | 2       |
| 1     | 23    | 1       |
| 1     | 24    | 1       |
| 1     | 56    | 1       |
| 1     | 33    | 1       |
| 2     | 24    | 1       |
| 2     | 56    | 1       |
| 2     | 11    | 1       |
| 2     | 88    | 1       |
| 3     | 88    | 1       |
| 3     | 23    | 1       |
| 4     | 88    | 1       |
| 4     | 77    | 1       |
| 4     | 23    | 1       |
| 5     | 77    | 1       |
| 5     | 23    | 1       |
+---------+---------+---------------+
解释:
以用户1为例:
—用户1是用户2、3、4、6的好友。
-推荐页面有23(用户2喜欢),24(用户3喜欢),56(用户3喜欢),33(用户6喜欢),77(用户2和用户3喜欢)。
-请注意,第88页不推荐,因为用户1已经喜欢它。

另一个例子是用户6:
—用户6是用户1的好友。
-用户1只喜欢了88页,但用户6已经喜欢了。因此,用户6没有推荐。

您可以使用类似的过程为用户2、3、4和5推荐页面。

解法

方法一

# Write your MySQL query statement below
WITH
  S AS (
    SELECT * FROM Friendship
    UNION
    SELECT user2_id, user1_id FROM Friendship
  )
SELECT user1_id AS user_id, page_id, COUNT(1) AS friends_likes
FROM
  S AS s
  LEFT JOIN Likes AS l ON s.user2_id = l.user_id
WHERE
  NOT EXISTS (
    SELECT 1
    FROM Likes AS l2
    WHERE user1_id = l2.user_id AND l.page_id = l2.page_id
  )
GROUP BY user1_id, page_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文