SQL架构

表名: Friendship

+-------------+------+
| 列名         | 类型 |
+-------------+------+
| user1_id    | int  |
| user2_id    | int  |
+-------------+------+
(user1_id, user2_id) 是这个表的主键。
这张表的每一行都表示用户 user1_id 和 user2_id 是朋友。
请注意,user1_id < user2_id。

如果一对朋友 x  和 y 至少有三个共同的朋 ,那么 x 和 y 之间的友谊就是坚定的

写一个 SQ L查询来找到所有的坚定的友谊

注意,结果表不应该包含重复,并且 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)。
# Write your MySQL query statement below
with t1 as(
select
user1_id,user2_id# 左面是 所有的用户id 右面是所有用户id的朋友 id
from
Friendshipunion allselect
user2_id,user1_id
from
Friendship
),
t2 as (
select
l1.user1_id,l2.user1_id user2_id,count(distinct l1.user2_id) common_friend
from
t1 l1  join t1 l2
on l1.user2_id = l2.user2_id and l1.user1_id<>l2.user1_id
#t1表 按 user1_id相同 内连接 按 l1.user1_id 和 l2.user1_id 分组 查询 l1.user2_id(共同的朋友)的数量  >=3
group by l1.user1_id,l2.user1_id
having count(distinct l1.user2_id)>=3
)
select
t2.user1_id,t2.user2_id,t2.common_friend
from
t2 left join Friendship f
#t2表中的查询结果 包含类似于 (1,2)(2,1)因此 左连接 Friendship 表 选出(1,2)这样类型的数据
on t2.user1_id = f.user1_id and t2.user2_id = f.user2_id
where f.user1_id is not null

on 最后一个条件用 < 提高了效率:

with t1 as(
select
user1_id,user2_id# 左面是 所有的用户id 右面是所有用户id的朋友 id
from
Friendshipunion allselect
user2_id,user1_id
from
Friendship
) ,t2 as(select
l1.user1_id,l2.user1_id user2_id,count(distinct l1.user2_id) common_friend
from
t1 l1  join t1 l2
on l1.user2_id = l2.user2_id and l1.user1_id<l2.user1_id
#t1表 按 user1_id相同 内连接 按 l1.user1_id 和 l2.user1_id 分组 查询 l1.user2_id(共同的朋友)的数量  >=3
group by l1.user1_id,l2.user1_id
having count(distinct l1.user2_id)>=3
)
select
t2.user1_id,t2.user2_id,t2.common_friend
from
t2 left join Friendship f
#t2表中的查询结果 包含类不是朋友的值 因此 左连接 Friendship 表 选出互为朋友的数据
on t2.user1_id = f.user1_id and t2.user2_id = f.user2_id
where f.user1_id is not null

1949. 坚定的友谊相关推荐

  1. leetcode中等之1949.坚定的友谊

    表名: Friendship 列名 类型 user1_id int user2_id int (user1_id, user2_id) 是这个表的主键. 这张表的每一行都表示用户 user1_id 和 ...

  2. 【LC中等】1949. 坚定的友谊

    ❤️博客主页: 楚生辉 ❤️系列专栏:[LeetCode刷题] ❤️一句短话: 坚持不懈,孜孜不倦 1.题目描述 表名: Friendship +-------------+------+ | 列名 ...

  3. 日本VS澳大利亚与“亚洲的友谊”

    日本VS澳大利亚与"亚洲的友谊" 几年以来的日本足球常常让我们感叹他们的进步,从中田英寿到中村俊辅,从特鲁西埃到济科,技术型球队的风格日渐成熟,整体配合具备相当高的实力,联合会杯战 ...

  4. 计算机技能大赛广播稿,友谊第一比赛第二广播稿.doc

    友谊第一比赛第二广播稿 友谊第一比赛第二广播稿 篇一:友谊第一比赛第二广播稿 致运动员 不为掌声的诠释, 不伟刻意的征服, 只有辛勤的汗水化作追求的脚步. 心中坚定的信念, 脚下沉稳的步伐, 你用行动 ...

  5. 鸿蒙系统搁置,华为:我们将坚定的支持安卓生态,鸿蒙系统没有明确上市时间...

    对于目前的国产手机市场来说,除了期待像折叠屏手机,5G手机这样硬件方面的革新外,在软件系统方面,对已经确认有自己操作系统的华为也是期待万分.在这段时间里,关于华为鸿蒙操作系统的消息数不胜数,似乎离发布 ...

  6. 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)...

    <西游记>中的唐僧团队历经千难万险,终于求得真经,目标明确.分工合理为这支队伍最终走向成功奠定了基础.唐僧从一开始,就为这个团队设定了西天取经的目标,虽然经历各种挫折与磨难,但目标从未动摇 ...

  7. 高质量的友谊总是发生在两个优秀的独立人格之间

    周国平 使一种交往具有价值的不是交往本身,而是交往者各自的价值.高质量的友谊总是发生在两个优秀的独立人格之间,它的实质是双方互相由衷的欣赏和尊敬.因此,重要的是使自己真正有价值,配得上做一个高质量的朋 ...

  8. 8. American Friendship 美国式的友谊

    8. American Friendship 美国式的友谊 (1) Americans usually consider themselves a friendly people.Their frie ...

  9. 【正一专栏】轮回-从坚信去年骑士会逆转到今年坚定看好勇士横扫

    轮回-从坚信去年骑士会逆转到今年坚定看好勇士横扫 NBA总决赛骑士回到主场依然没有阻挡住勇士队前进的步伐,最后时刻死神杜兰特终结了比赛,带领勇士绝地反击逆转了骑士队,骑士丢掉了到手的胜利,在大比分0: ...

最新文章

  1. 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)...
  2. 这款库克寄予厚望的苹果产品,只活了2年
  3. C++基础知识(二)--左值右值--逻辑表达式求值优化--逗号运算符与表示式--输入输出格式控制...
  4. PHP 实现一个可用的redis 事务锁, 解决并发问题
  5. A flight (to Boston) to Denver - 基于转移的顺滑技术研究 | 论文访谈间 #22
  6. Windwos中system、System32、SysWOW64区别
  7. linux关机_3.5 开关机命令及7个运行级别《LINUX-centos7-操作系统入门到精通》
  8. toStringequals方法
  9. 讲幻灯片的基本技巧——2021年中会议发言之二
  10. tcpdf 使用总结
  11. Jlink V8 在 Keil MDK5.25 中无法正常烧写、调试程序的故障处理
  12. C# 版 EXE捆绑器
  13. 02-DDL 数据定义语言
  14. 检查采购订单是否有零单价
  15. UVA 213 - Message Decoding 简单题 lambda表达式 23333333
  16. 转载:关于调制比、过调制、基波电压和母线电压的概念和关系总结
  17. 解决web系统session劫持
  18. VScode 的 code snippet 中可以使用的一些变量(时间,日期等)
  19. JDBC简介及原理和使用介绍
  20. Java互联网架构-企业级实战秒杀系统优化方案与应用思路

热门文章

  1. ASEMI代理AD9833BRMZ-REEL原装ADI车规级AD9833BRMZ-REEL
  2. 电脑数据,电脑数据恢复软件,失易得数据恢复
  3. 家装产业的数字化,正在成为越来越多人的新共识
  4. e-mobile服务器地址显示无法登陆,E-Mobile服务器安装设置手册.doc
  5. 贝叶斯学习(Bayesian Learning)基础篇
  6. Esxi6.7安装TinyCoreLinux
  7. 2021-05-02 收心继续
  8. k8s查看集群信息及基本命令
  9. Java健康档案管理系统
  10. Python工程师是做什么的?如何学习Python