SQL学习笔记:利用表自连接求共同好友
一、背景
如何求微信的共同好友?
二、实操
1.建立测试表
-- 建立测试表
CREATE TABLE wechat_friends
(
uid BIGINT,
tuid BIGINT
);
-- 插入数据
INSERT INTO wechat_friends(uid, tuid)
VALUES
(100,200),
(100,300),
(100,400),
(200,100),
(200,300),
(200,400),
(300,100),
(300,200),
(400,100);
-- 查询
SELECT * FROM wechat_friends;
2.分析
uid
表示每个用户在微信后台的用户 id
。
tuid
表示 uid
对应的微信好友 id
。
tuid | 好友1 | 好友2 |
---|---|---|
200 | 100 | 300 |
300 | 100 | 200 |
再对好友1、好友2进行 group by
操作,计算 tuid
个数即可。
3.自连接
-- 自连接
SELECT a.uid AS a_uid,
a.tuid AS a_tuid,
b.uid AS b_uid,
b.tuid AS b_tuid
FROM
(
SELECT * FROM wechat_friends
) a
INNER JOIN
(
SELECT * FROM wechat_friends
) b
ON a.tuid = b.tuid -- 21行
AND a.uid < b.uid -- 6行
4.分组统计
SELECT a_uid,
b_uid,
COUNT(a_tuid) AS cnt
FROM
(
SELECT a.uid AS a_uid,
a.tuid AS a_tuid,
b.uid AS b_uid,
b.tuid AS b_tuid
FROM
(
SELECT * FROM wechat_friends
) a
INNER JOIN
(
SELECT * FROM wechat_friends
) b
ON a.tuid = b.tuid -- 21行
AND a.uid < b.uid -- 6行
) dd
GROUP BY a_uid, b_uid
/*
a_uid b_uid cnt
100 200 2
100 300 1
200 300 1
200 400 1
300 400 1
*/
参考链接:一道求微信共同好友数的SQL题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)