表名: Friendship+-------------+------+| 列名 | 类型 |+-------------+------+| user1_id | int || user2_id | int |+-------------+------+(user1_id, user2_id) 是这个表的主键。这张表的每一行都表示用户 user1_id 和 user2_id 是朋友。请注意,user1_id < user2_id。如果 x 和y为朋友且他们至少有三个共同的朋友 ,那么x 和y 之间的友谊就是坚定的。写一个 SQL 查询来找到所有的坚定的友谊。注意,结果表不应该包含重复,并且 user1_id < user2_id。以任何顺序返回结果表。查询结果的格式在下面的例子中。示例1:输入:表 Friendship:+----------+----------+| user1_id | user2_id |+----------+----------+| 1 | 2 || 1 | 3 || 2 | 3 || 1 | 4 || 2 | 4 || 1 | 5 || 2 | 5 || 1 | 7 || 3 | 7 || 1 | 6 || 3 | 6 || 2 | 6 |+----------+----------+输出:+----------+----------+---------------+| user1_id | user2_id | common_friend |+----------+----------+---------------+| 1 | 2 | 4 || 1 | 3 | 3 |+----------+----------+---------------+解释:用户 1 和 2 有 4 个共同的朋友(3,4,5,和 6)。用户 1 和 3 有 3 个共同的朋友(2,6,和 7)。我们没有包括用户 2 和 3 的友谊,因为他们只有两个共同的朋友(1 和 6)。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/strong-friendship
Create table If Not Exists Friendship (user1_id int, user2_id int);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 ('2', '3');insert into Friendship (user1_id, user2_id) values ('1', '4');insert into Friendship (user1_id, user2_id) values ('2', '4');insert into Friendship (user1_id, user2_id) values ('1', '5');insert into Friendship (user1_id, user2_id) values ('2', '5');insert into Friendship (user1_id, user2_id) values ('1', '7');insert into Friendship (user1_id, user2_id) values ('3', '7');insert into Friendship (user1_id, user2_id) values ('1', '6');insert into Friendship (user1_id, user2_id) values ('3', '6');insert into Friendship (user1_id, user2_id) values ('2', '6');
select user1_id,user2_id from Friendshipunion allselect user2_id as user1_id,user1_id as user2_id from Friendship;
withtmp as (select user1_id,user2_id from Friendshipunion allselect user2_id as user1_id,user1_id as user2_id from Friendship)selecta.user1_id,b.user1_id user2_id,count(1) common_friendfrom tmp ainner join tmp bon a.user2_id = b.user2_idand a.user1_id < b.user1_idwhere (a.user1_id,b.user1_id) in (select c.user1_id,c.user2_id from Friendship c)group by a.user1_id,b.user1_idhaving count(1)>=3order by a.user1_id,b.user1_id;

文章转载自跟强哥学SQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




