一道求微信共同好友数的SQL题
「哎呀,我们竟然有共同好友」
「哎呀,没想到你们也认识」
经常在朋友圈评论区能够看到类似的评论,这些评论反映的其实就是共同好友这个概念。那如果你是负责微信的数据分析师,现在业务方想看下微信中任意两个人之间有多少个共同好友,应该怎么看呢?
我们先创建一个模拟数据表,创建代码如下:
create table weixin_friends
(uid bigint,
tuid bigint);insert into weixin_friends (uid,tuid)
values
(100,200),
(100,300),
(100,400),
(200,100),
(200,300),
(200,400),
(300,100),
(300,200),
(400,100)
通过上述代码就创建了好友关系表weixin_friends
,该表的详细(模拟)数据如下:
uid | tuid |
---|---|
100 | 200 |
100 | 300 |
100 | 400 |
200 | 100 |
200 | 300 |
200 | 400 |
300 | 100 |
300 | 200 |
400 | 100 |
uid表示每个用户在微信后台的用户id,tuid表示uid对应的微信好友id,现在我们要通过这张表查询出任意两个人之间的共同好友数,应该怎么做呢?
想一下,如果现在需要我们人工找出上表中任意两个人的共同好友的话,你会怎么做呢?
我会先从tuid着手,看下每一个tuid是哪些人的共同好友,也就是tuid链接了哪些人?
tuid | 好友1 | 好友2 |
---|---|---|
200 | 100 | 300 |
300 | 100 | 200 |
400 | 100 | 200 |
100 | 200 | 300 |
100 | 200 | 400 |
100 | 300 | 400 |
如果我们能整理出上表这样的话,任意两个人的共同好友数就一目了然了,只需要按照好友1、好友2同时group by
,然后count(tuid)
就可以得到任意两个用户的共同好友数了。
那我们怎么样才可以得到上面这张的表呢?那就是把表weixin_friends
通过tuid进行自连接,实现代码如下:
select t1.uid t1_uid,t1.tuid t1_tuid,t2.uid t2_uid,t2.tuid t2_tuid
from (select uid,tuid from weixin_friends) t1
join (select uid,tuid from weixin_friends) t2
on t1.tuid = t2.tuid
运行上面代码会得到如下结果:
上面结果存在两个问题,一个是自己和自己是共同好友(红框圈出来的部分),即t1_uid = t2_uid
,另外一个就是AB和BA是两条记录(绿框圈出来的部分),实际上背后是相同的两个人。为了解决这两个问题,我们就需要对t1_uid和t2_tuid进行限制,代码如下:
select t1.uid t1_uid,t1.tuid t1_tuid,t2.uid t2_uid,t2.tuid t2_tuid
from (select uid,tuid from weixin_friends) t1
join (select uid,tuid from weixin_friends) t2
on t1.tuid = t2.tuid and t1.uid < t2.uid
运行上面代码会得到如下结果:
然后再针对这个表中的t1_uid、t2_uid同时进行group by
即可,实现代码如下:
select t1_uid,t2_uid,count(t1_tuid) cnt
from (select t1.uid t1_uid,t1.tuid t1_tuid,t2.uid t2_uid,t2.tuid t2_tuidfrom (select uid,tuid from weixin_friends) t1 join (select uid,tuid from weixin_friends) t2 on t1.tuid = t2.tuid and t1.uid < t2.uid)t
group by t1_uid,t2_uid
运行上面代码会得到如下结果:
这就是我们想要的任意两个用户之间的共同好友数了。
好友俊红对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,感兴趣的同学可以点击下方链接了解:
一道求微信共同好友数的SQL题相关推荐
- 如何利用SQL求取微信的共同好友数?
「哎呀,我们竟然有共同好友」 「哎呀,没想到你们也认识」 经常在朋友圈评论区能够看到类似的评论,这些评论反映的其实就是共同好友这个概念.那如果你是负责微信的数据分析师,现在业务方想看下微信中任意两个人 ...
- Ipad全线涨价;马斯克计划未来数月裁掉推特 75% 员工;支付宝已支持给微信QQ好友转账 | EA周报...
EA周报 2022年10月21日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.马斯克计划未来数月裁掉推特 75% 员工 2.新款 iPad Pro 售 ...
- 文件夹中是微信的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的),参照笔记,求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?
题目 文件夹中是微信的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的),参照笔记,求出哪些人两两之间有共同好友,及他俩的共同好友都有谁? 本题声明: 1.采用Lin ...
- 每天一道大厂SQL题【Day17】腾讯外包(微信相关)真题实战(二)
每天一道大厂SQL题[Day17]腾讯外包(微信相关)真题实战(二) 大家好,我是Maynor.相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间, ...
- 微信云控开发SDK使用教程--手机机端回传检测清粉好友数通知服务端
微信云控开发SDK使用教程--手机机端回传检测清粉好友数通知服务端 case PostFriendDetectCountNotice : {//手机机端回传检测清粉好友数 log.debug(&quo ...
- 每天一道大厂SQL题【Day03】订单量统计
每天一道大厂SQL题[Day03]订单量统计 大家好,我是Maynor.相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典 ...
- python 操作键盘,鼠标 。我这个是自动企业微信加好友的,源码可以修改成别的。挺好使!
python 操作键盘,鼠标 .我这个是自动企业微信加好友的,源码可以修改成别的.挺好使! 键盘的按键码可以去百度搜,大体就是这么操作的 import win32con import win32api ...
- 一道有趣的sql题,统计复旦用户8月练题情况
这是一道非常有趣的sql题,第一部分是题的描述,第二部分是题解(tips:右上角有个小目录). 不妨看完题目先思考一下,或者实际运行一下.也可直接从题解看起,题解并非直述答案,而是从每一个sql知识点 ...
- 每天一道大厂SQL题【Day02】电商场景TopK统计
每天一道大厂SQL题[Day02] 大家好,我是Maynor.相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题, ...
最新文章
- c语言用指针带出局部变量,关于C语言中返回局部变量和局部指针变量
- ios 获取当前系统时间
- 常用脚本--在线重建或重整实例下所有索引
- CISCO路由器连接ADSL之PPPoE配置
- 里皮正式告别国足:我尽了最大努力让球队成长
- Python的web相关及Django简介
- Java制作证书的工具keytool用法总结
- curl的php多线程类,php利用curl实现多线程类的示例
- php 7中文手册pdf版,手册的格式 - PHP 7 中文文档
- MFC添加鼠标右键菜单
- 玩转Luat 进阶篇③——远程升级实现过程详解
- 自动化测试遇到的难点_自动化测试不成功的原因和实施过程中存在的问题
- Windows2008下安装域控DC及加域
- 谷歌的AI布局:机器学习是重心 继续在中国招人
- vba xla文件宏文件解密
- android 电容屏多点触控协议
- bugly android 错误不上报,Bugly不上上报日志的解决办法
- 护士资格证考试机考可以用计算机吗,护士资格人机对话考试怎么考?
- java垃圾回收代码
- 银行ATM登录管理系统(最简版)
热门文章
- python分布式计算框架-Parallel Python
- linux双系统uefi引导修复,桌面应用|Windows和Ubuntu双系统,修复UEFI引导的两种办法...
- 异或的计算机符号,异或运算怎么算
- ORACLE的工作机制
- java订阅发布模式_Spring Boot ActiveMQ发布/订阅消息模式原理解析
- 三极管基极偏置电路原理应用于继电器的驱动电路的分析
- 【IC萌新虚拟项目】ppu整体uvm验证环境搭建
- 苹果新专利曝光,用户可通过Apple Watch及MR头显摄像头设置3D虚拟化身
- java redis缓存清除_Spring Cache手动清理Redis缓存
- 使用 Satis 搭建私有仓库