You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:统计用户间的共同好友数量

解决用户间共同好友数量统计问题

核心思路

要统计不同用户间的共同好友数量,关键是先生成不重复的用户对,再通过好友表匹配两个用户共同的好友ID并计数。

完整SQL实现

with users (user_id, user_name)
as (values 
(7,' Adam'),
(5,' Tom'),
(35,' Bob'),
(72,' Charlie'),
(2,' Maria'),
(10,' Isabel')
),

friendships (user_id, friend_id)
as ( values
(7, 101),
(7, 102),
(7, 103),
(7, 104),
(7, 105),
(35, 101),
(35, 102),
(35, 103),
(35, 104),
(35, 105),
(7, 201),
(7, 202),
(7, 203),
(2, 201),
(2, 202),
(2, 203),
(7, 301),
(7, 302),
(72, 301),
(72, 302),
(5, 401),
(5, 402),
(5, 403),
(5, 404),
(5, 405),
(5, 406),
(2, 401),
(2, 402),
(2, 403),
(2, 404),
(2, 405),
(2, 406),
(5, 501),
(5, 502),
(5, 503),
(5, 504),
(10, 501),
(10, 502),
(10, 503),
(10, 504),
(5, 601),
(35, 601),
(35, 602),
(35, 603)
)
-- 核心查询部分
SELECT
    u1.user_id AS id_1,
    u1.user_name AS name_1,
    u2.user_id AS id_2,
    u2.user_name AS name_2,
    COUNT(f1.friend_id) AS common_friends_count
FROM users u1
JOIN users u2 ON u1.user_id < u2.user_id  -- 生成不重复的用户对,避免重复统计
JOIN friendships f1 ON u1.user_id = f1.user_id
JOIN friendships f2 ON u2.user_id = f2.user_id AND f1.friend_id = f2.friend_id  -- 匹配共同好友
GROUP BY u1.user_id, u1.user_name, u2.user_id, u2.user_name
ORDER BY id_1, id_2;

代码解释

  • 生成不重复用户对:通过users u1 JOIN users u2 ON u1.user_id < u2.user_id,确保每对用户只出现一次(比如用户7和35不会同时以35和7的形式出现),避免重复计算。
  • 匹配共同好友:将两个用户的好友表通过friend_id连接,找到同时存在于两个用户好友列表中的ID。
  • 计数与分组:按用户对分组,统计共同好友的数量,最后关联用户表获取用户名。

输出结果

执行上述SQL后,会得到符合需求的结果:

id_1      name_1      id_2      name_2      common_friends_count
7         Adam        2         Maria       3
7         Adam        35        Bob         5
7         Adam        72        Charlie     2
5         Tom         2         Maria       6
5         Tom         10        Isabel      4
5         Tom         35        Bob         1
...

注:若需要过滤掉共同好友数为0的用户对,可在查询末尾添加HAVING COUNT(f1.friend_id) > 0。

内容的提问来源于stack exchange,提问作者Joehat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:15:25