Leetcode力扣 MySQL数据库 1892 页面推荐
创始人
2024-04-10 22:22:01

1892 页面推荐

SQL架构

Create table If Not Exists Friendship_1892 (user1_id int, user2_id int);
Create table If Not Exists Likes_1892 (user_id int, page_id int);
Truncate table Friendship_1892;
insert into Friendship_1892 (user1_id, user2_id) values ('1', '2');
insert into Friendship_1892 (user1_id, user2_id) values ('1', '3');
insert into Friendship_1892 (user1_id, user2_id) values ('1', '4');
insert into Friendship_1892 (user1_id, user2_id) values ('2', '3');
insert into Friendship_1892 (user1_id, user2_id) values ('2', '4');
insert into Friendship_1892 (user1_id, user2_id) values ('2', '5');
insert into Friendship_1892 (user1_id, user2_id) values ('6', '1');
Truncate table Likes_1892;
insert into Likes_1892 (user_id, page_id) values ('1', '88');
insert into Likes_1892 (user_id, page_id) values ('2', '23');
insert into Likes_1892 (user_id, page_id) values ('3', '24');
insert into Likes_1892 (user_id, page_id) values ('4', '56');
insert into Likes_1892 (user_id, page_id) values ('5', '11');
insert into Likes_1892 (user_id, page_id) values ('6', '33');
insert into Likes_1892 (user_id, page_id) values ('2', '77');
insert into Likes_1892 (user_id, page_id) values ('3', '77');
insert into Likes_1892 (user_id, page_id) values ('6', '88');


Table: Friendship

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user1_id      | int     |
| user2_id      | int     |
+---------------+---------+
(user1_id,user2_id)是Friendship表的主键。
该表的每一行表示用户user1_id和user2_id是好友。
 

Table: Likes

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| user_id     | int     |
| page_id     | int     |
+-------------+---------+
(user_id,page_id)是Likes表的主键。
(user_id, page_id) is the primary key for this table.
该表的每一行表示user_id喜欢page_id。
 

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

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

user_id: 系统向其提出建议的用户的ID。
page_id: 推荐为user_id的页面ID。.
friends_likes: user_id对应page_id的好友数。
以任意顺序返回结果表。

查询结果格式示例如下:

 
Friendship table:
+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1        | 2        |
| 1        | 3        |
| 1        | 4        |
| 2        | 3        |
| 2        | 4        |
| 2        | 5        |
| 6        | 1        |
+----------+----------+
 
Likes table:
+---------+---------+
| user_id | page_id |
+---------+---------+
| 1       | 88      |
| 2       | 23      |
| 3       | 24      |
| 4       | 56      |
| 5       | 11      |
| 6       | 33      |
| 2       | 77      |
| 3       | 77      |
| 6       | 88      |
+---------+---------+

Result table:
+---------+---------+---------------+
| 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推荐页面。

解题

SELECT f.user1_id AS user_id, l.page_id, COUNT(*) AS friends_likes
FROM (SELECT user1_id, user2_idFROM Friendship_1892UNIONSELECT user2_id, user1_idFROM Friendship_1892
) fINNER JOIN Likes_1892 l ON f.user2_id = l.user_id
WHERE NOT EXISTS (SELECT *FROM Likes_1892WHERE user_id = f.user1_idAND page_id = l.page_id
)
GROUP BY f.user1_id, l.page_id;

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...