mysql - 从两列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
有没有办法做到这一点?谢谢!
解决方案
您可以将联合查询用作子查询,然后在查询的顶层对用户进行分组和求和:
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
推荐阅读
- c# - c#实体框架分页选择?
- sql - 如果找不到匹配项,如何加入第二个表中的默认值?
- angular - 执行 ng build --prod 时出现“预期 1-3 个参数但得到 0”错误
- php - PHP - 在 php 控制器中获取另一个函数的变量
- php - laravel orm 更新文档
- angular - canActivate - 减慢应用程序的速度。什么时候调用它?
- android - 如果没有 @Inject 构造函数或 @Provides-annotated,则无法提供 ViewModel
- powershell - 授予“LogonAsAService”权限不响应
- python - pandas.dataframe 分组和转置
- acumatica - 无法覆盖采购订单屏幕中的取消订单按钮