首页 > 解决方案 > 从两列MySQL计算朋友

问题描述

我有两列包含用户 ID 和他们的朋友,但同一个用户可以出现在另一列中,并且行是唯一的。例如,

1 5
2 6
2 8
2 7
3 2

因此,要计算用户 2 的所有朋友,我需要从 col2 中计算三个,从 col1 中计算一个。

我找到了一个解决方案,用一列来做到这一点。(我需要为所有用户计算这个)

SELECT col1, COUNT(*)
FROM friends
GROUP BY col1

如果我添加

UNION 
SELECT col2, COUNT(*)
FROM friends
GROUP BY col2

它只是在下面添加行,尽管两种情况下的计数都是有效的。对于用户 2,它将是

3

1

但我需要一个值,它是两者的总和:

4

有没有办法做到这一点?谢谢!

标签: mysqlcount

解决方案


您可以将联合查询用作子查询,然后在查询的顶层对用户进行分组和求和:

SELECT user, SUM(friends) AS friends
FROM (
  SELECT col1 AS user, COUNT(*) AS friends
  FROM friends
  GROUP BY col1
  UNION ALL
  SELECT col2, COUNT(*)
  FROM friends
  GROUP BY col2
) f
GROUP BY user

输出(用于您的样本数据):

user    friends
1       1
2       4
3       1
5       1
6       1
7       1
8       1

db-fiddle 上的演示


推荐阅读