+---------------+---------+
| 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。
---- ⚠️⚠️⚠️
with user_friend as
(
SELECT user1_id, user2_id FROM Friendship
union
SELECT user2_id, user1_id FROM Friendship
)
SELECT f.user1_id user_id, l.page_id page_id, count(DISTINCT f.user2_id) friends_likes
FROM user_friend f
LEFT JOIN Likes l on f.user2_id = l.user_id
where (user1_id, page_id) not in (SELECT * from Likes)
GROUP BY f.user1_id, l.page_id
with user_friend as
(
SELECT user1_id, user2_id FROM Friendship
union
SELECT user2_id, user1_id FROM Friendship
)
SELECT f.user1_id user_id, l2.page_id page_id, count(DISTINCT f.user2_id) friends_likes
FROM user_friend f
LEFT JOIN Likes l2 on f.user2_id = l2.user_id -- friends like
LEFT JOIN Likes l1 on f.user1_id = l1.user_id and l1.page_id = l2.page_id -- we all like
where l1.page_id is null
GROUP BY f.user1_id, l2.page_id
order by f.user1_id
Drop table Friendship, Likes;
Create table If Not Exists Friendship (user1_id int, user2_id int);
Create table If Not Exists Likes (user_id int, page_id int);
Truncate table Friendship;
insert into Friendship (user1_id, user2_id) values ('1', '2');
insert into Friendship (user1_id, user2_id) values ('1', '3');
insert into Friendship (user1_id, user2_id) values ('1', '4');
insert into Friendship (user1_id, user2_id) values ('2', '3');
insert into Friendship (user1_id, user2_id) values ('2', '4');
insert into Friendship (user1_id, user2_id) values ('2', '5');
insert into Friendship (user1_id, user2_id) values ('6', '1');
Truncate table Likes;
insert into Likes (user_id, page_id) values ('1', '88');
insert into Likes (user_id, page_id) values ('2', '23');
insert into Likes (user_id, page_id) values ('3', '24');
insert into Likes (user_id, page_id) values ('4', '56');
insert into Likes (user_id, page_id) values ('5', '11');
insert into Likes (user_id, page_id) values ('6', '33');
insert into Likes (user_id, page_id) values ('2', '77');
insert into Likes (user_id, page_id) values ('3', '77');
insert into Likes (user_id, page_id) values ('6', '88');
----