如何用SQL统计users_groups表中每个用户的好友数量?
实现每个用户的好友数量统计
原表 users_groups 结构与数据
| userId | groupId |
|---|---|
| userA | groupOne |
| userA | groupTwo |
| userA | groupThree |
| userB | groupOne |
| userC | groupOne |
| userD | groupTwo |
需求说明
好友定义为与该用户同组的其他用户,需统计每个用户的好友数量(同一个好友即使和用户在多个组重叠,也只计数一次)。
SQL 查询语句
SELECT u1.userId, COUNT(DISTINCT u2.userId) AS numFriends FROM users_groups u1 LEFT JOIN users_groups u2 ON u1.groupId = u2.groupId AND u1.userId != u2.userId GROUP BY u1.userId ORDER BY u1.userId;
逻辑说明
- 自连接关联:通过
users_groups自连接,匹配同组且非自身的用户,找出当前用户在每个组内的所有同组其他成员。 - 去重计数:使用
COUNT(DISTINCT u2.userId)避免同一个好友因多组重叠被重复统计。 - 分组汇总:按用户ID分组,计算每个用户的好友总数。
- LEFT JOIN 兼容无好友场景:确保即使用户没有任何同组成员,也会被统计为0,覆盖所有用户的统计需求。
查询结果
| userId | numFriends |
|---|---|
| userA | 3 |
| userB | 2 |
| userC | 2 |
| userD | 1 |
内容的提问来源于stack exchange,提问作者ijustclosedthewindow
相关产品推荐
相关产品推荐

