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题

posted @   Hider1214  阅读(525)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示