单挑力扣(LeetCode)SQL题:1951. 查询具有最多共同关注者的所有两两结对组(难度:中等)

news2025/1/12 23:03:24

题目:1951. 查询具有最多共同关注者的所有两两结对组

(通过次数2,464 | 提交次数3,656,通过率67.40%)

表: Relations
+-------------+------+
| Column Name | Type |
+-------------+------+
| user_id     | int  |
| follower_id | int  |
+-------------+------+
(user_id, follower_id) 是这个表的主键.
这个表的每一行,表示这个user_id的用户和他的关注者,关注者的id 就是本表的 user_id.

写出一个查询语句,找到具有最多共同关注者的所有两两结对组。换句话说,如果有两个用户的共同关注者是最大的,我们应该返回所有具有此最大值的两两结对组
结果返回表,每一行应该包含user1_id和?user2_id,其中user1_id < user2_id.
返回结果不要求顺序。

查询结果格式如下例:
Relations 表:
+---------+-------------+
| user_id | follower_id |
+---------+-------------+
| 1       | 3           |
| 2       | 3           |
| 7       | 3           |
| 1       | 4           |
| 2       | 4           |
| 7       | 4           |
| 1       | 5           |
| 2       | 6           |
| 7       | 5           |
+---------+-------------+

Result 表:
+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1        | 7        |
+----------+----------+

用户1 和用户 2 有2个共同的关注者(3和4)。
用户1 和用户 7 有3个共同的关注者(3,4和5)。
用户2 和用户7 有2个共同的关注者(3和4)。
既然两两结对的所有组队的最大共同关注者的数值是3,所以,我们应该返回所有拥有3个共同关注者的两两组队,这就是仅有的一对(1, 7).
我们返回的是(1, 7).,而不是(7, 1).
注意,我们没有关于用户3,4,5的任何关注者信息,我们认为他们有0个关注者。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/all-the-pairs-with-the-maximum-number-of-common-followers
#测试数据
Create table If Not Exists Relations (user_id int, follower_id int);
insert into Relations (user_id, follower_id) values ('1', '3');
insert into Relations (user_id, follower_id) values ('2', '3');
insert into Relations (user_id, follower_id) values ('7', '3');
insert into Relations (user_id, follower_id) values ('1', '4');
insert into Relations (user_id, follower_id) values ('2', '4');
insert into Relations (user_id, follower_id) values ('7', '4');
insert into Relations (user_id, follower_id) values ('1', '5');
insert into Relations (user_id, follower_id) values ('2', '6');
insert into Relations (user_id, follower_id) values ('7', '5');

解题思路:

从67.40%的通过率上来看,这道题确实只能算是个中等题。

但是再一看提交次数,截至目前,只有区区3656个。

与之前的题目,动辄上万,甚至上十万的提交次数相比,真的是少的可怜。

不知道是不是因为有部分小伙伴,看到这道题就直接放弃了。

从难度上来说,确实还是有一些的。强哥也思考了5分钟没有头绪。

最后从题目描述“两两结对的所有组队的最大共同关注者”里的“两两结对”的描述,才找到灵感。

什么叫两两结对?无非就是两两对比。两两怎么对比?最简单的理解,就是把两边的数据,拉到同一行,再进行对比。

看完这个描述,是不是觉得很眼熟?这不就是笛卡尔嘛!

如果把表Relations做自关联,不带关联条件的话,那么就实现了两两结对,然后分别算出每一对的共同关注数,并取出共同关注数最大的那一对,是不是就可以了?

比如,1的关注者(1,3),(1,4),(1,5)与2的关注者(2,3),(2,4),(2,6)的共同关注数怎么计算呢?

直接看,可能不直观,我们使用表格看一下。

图片

这样看,是不是就很直观了?

把1和2的笛卡尔积的结果,过滤出相同的follower_id,然后以a.user_id和b.user_id分组计数就可以了。


select
    a.user_id,
    b.user_id,
    count(*) cn
from Relations a
inner join Relations b
on a.follower_id = b.follower_id
group by a.user_id,b.user_id;

上面的SQL,可以计算出两两用户之间的共同关注数,有了这个结果,相信再排序得出共同关注数最多的组合,就不是什么难事了。

当然,如果你执行过上面的SQL,可能会发现返回了一些奇怪的结果。比如,用户1与它自身的共同关注数;再比如,用户1和2的结果会出现(1,2)和(2,1)两个组合,而两个组合的共同关注数是一样的。

不过,简单分析一下,做个过滤,相信很容易就可以把这些数据剔除了。

参考SQL:

select 
    user1_id,
    user2_id 
from (
    select 
        user1_id,
        user2_id,
        rank() over(order by cn desc) rk
    from 
    (
        select
            a.user_id user1_id,
            b.user_id user2_id,
            count(*) cn
        from Relations a
        inner join Relations b
        on a.user_id < b.user_id
        and a.follower_id = b.follower_id
        group by a.user_id,b.user_id
    )a
)b
where b.rk = 1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1341199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ctfshow——文件上传

文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159 文件上传思路 web 151 打开页面显示&#xff1a;前台校验不可靠。说明这题是前端验证。 右键查看源代码&#xff0c;找到与上传点有关的前端代码&#xff1a;   这里使…

磁盘相关知识

一、硬盘数据结构 1.扇区&#xff1a; 盘片被分为多个扇形区域&#xff0c;每个扇区存放512字节的数据&#xff08;扇区越多容量越大&#xff09; 存放数据的最小单位 512字节 &#xff08;硬盘最小的存储单位是扇区&#xff0c;512 个字节&#xff0c;八个扇区组成一块&…

VirtualBox 网络连接配置

这几天为了确认笔记本电脑的ssd磁盘型号&#xff0c;拆开电脑查看了一下&#xff0c;并且拔出来又装回去了&#xff0c;就是这个插拔的动作&#xff0c;导致原本能好好运行的虚拟机&#xff0c;突然启动报错启动不起来了。看了启动日志&#xff0c;显示启动的时候磁盘数据校验出…

leaflet学习笔记-地图缩略图(鹰眼)的添加(三)

介绍 地图缩略图控件有助于用户了解主窗口显示的地图区域在全球、全国、全省、全市等范围内的相对位置&#xff0c;也称为鹰眼图。Leaflet提供了好几种地图缩略图控件&#xff0c;本文介绍其中一个最常用控件&#xff0c;即插件Leaflet.MiniMap。 依赖添加 这些地图控件都可以…

Zblog主题模板:ZblogitseanPage博客主题模板

zblog主题模板&#xff1a;ZblogitseanPage博客主题模板 ZblogitseanPage博客主题模板主要是以文字内容为主导&#xff0c;将页面的设计杂乱的图片和元素进行最小化或者去除&#xff0c;从而使整个页面更加简洁、清晰&#xff0c;突出信息的呈现。 下面介绍一下zblog主题模板:Z…

数据库系统原理例题之——SQL 与关系数据库基本操作

SQL 与关系数据库基本操作 第四章 SQL 与关系数据库基本操作【例题】一 、单选题二 、填空题三 、简答题四 、设计题 【答案&解析】一、单选题二、填空题三、简答题四、设计题 【延伸知识点】【延伸知识点答案&解析】 第四章 SQL 与关系数据库基本操作 【例题】 一 、…

Redis哨兵sentinel

是什么&#xff1f; 哨兵巡查监控后台master主机是否故障&#xff0c;如果故障根据投票数自动将某一个slave库变为master&#xff0c;就行对外服务&#xff0c;称为无人值守运维 能干嘛&#xff1f; 主从监控&#xff1a;监控主从redis库是否正常工作 消息通知&#xff1a;…

作业--day38

1.定义一个Person类&#xff0c;包含私有成员&#xff0c;int *age&#xff0c;string &name&#xff0c;一个Stu类&#xff0c;包含私有成员double *score&#xff0c;Person p1&#xff0c;写出Person类和Stu类的特殊成员函数&#xff0c;并写一个Stu的show函数&#xff…

取证工具volatility插件版学习记录

更新时间&#xff1a;2023年12月18日11:48:29 1. 背景描述 在以前学习过volatility的基础功能&#xff0c;主要是使用volatility独立版进行学习的&#xff0c;前几天遇到一个ctf赛事&#xff0c;需要用到的是volatility的mimikatz模块&#xff0c;因为以前没使用过那个模块&…

Type-C接口显示器PD协议芯片方案-LDR6020

大家都知道显示器种类有很多种&#xff0c;有桌面显示器&#xff0c;便携显示器&#xff0c;智能显示器&#xff0c;甚至AR眼镜也可以算是一个微型显示器&#xff0c;传输信号的方式也很多种&#xff0c;如HDMI、VGA、DisplayPort、USB-C等等。现在较为统一更新的那就是欧盟规定…

vue实现滑动切换:切换选项时滑块有滑动过渡的效果

效果图 思路&#xff1a; 1. 高亮的色块是独立的一个盒子&#xff0c;需要插入当前激活的内容用来撑开色块盒子的宽度&#xff0c;这样色块的宽度就会和当前激活的内容宽度一致&#xff0c;色块的字体颜色设置透明即可 2. 色块滑动的距离是读当前激活元素的offsetLeft&#x…

中国蚁剑-antSword

1.简介 蚁剑是一款开源的跨平台Webshell管理工具&#xff0c;它是一个开源的远程管理工具&#xff0c;主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。蚁剑提供了一个图形化界面&#xff0c;可以通过简单的操作连接和控制目标设备或系统。 蚁剑具有以下…

POLL机制

文章目录 一、POLL机制1、应用场景2、执行流程 二、程序1、驱动程序2、测试应用程序 三、总结 一、POLL机制 1、应用场景 使用休眠-唤醒的方式等待某个事件发生时&#xff0c;有一个缺点&#xff1a;等待的时间可能很久。我们可以加上一个超时时间&#xff0c;这时就可以使用…

在linux服务器安装anaconda3

下载anaconda3 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh授权 chmod x Anaconda3-2023.09-0-Linux-x86_64.sh运行安装 ./Anaconda3-2023.09-0-Linux-x86_64.shenter yes 自定义路径&#xff0c;注意路径下的anaconda3文件夹不能已经存…

基于鸿蒙OS开发一个前端应用

创建JS工程&#xff1a;做鸿蒙应用开发到底学习些啥&#xff1f; 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择HarmonyOS模板库&#xff0c…

视频美颜SDK趋势畅想:未来发展方向与应用场景

当下&#xff0c;视频美颜SDK正不断演进&#xff0c;本文将深入探讨视频美颜SDK的发展趋势&#xff0c;探讨未来可能的方向和广泛的应用场景。 1.深度学习与视频美颜的融合 未来&#xff0c;我们可以期待看到更多基于深度学习算法的视频美颜SDK&#xff0c;为用户提供更高质量…

FinalShell连接虚拟机遇到的问题

在下载好VM后也安装好了虚拟机&#xff08;我这里使用Centos7.5&#xff09;&#xff0c;但是当使用FinalShell连接虚拟机的时候&#xff0c;一直提示连接超时。。。。 后来找了半天&#xff0c;发现是有次校园网和VM虚拟机冲突&#xff0c;就把虚拟机的网络连接给关了&#x…

Redis 核心知识总结

Redis 核心知识总结 认识 Redis 什么是 Redis&#xff1f; Redis 是一个由 C 语言开发并且基于内存的键值型数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 有以下几个特…

Python漂浮爱心完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

我的2023年,平淡中寻找乐趣

文章目录 两个满意我学会了自由泳。学习英语 一个较满意写博客 2024的期望 2023年&#xff0c;我有两个满意&#xff0c;一个较满意。 两个满意 我学会了自由泳。 开始练习自由泳是从2023年3月份&#xff0c;我并没有请教练&#xff0c;而是自己摸索。在抖音上看自由泳的视频…