mysql - 自连接查询以获取一张表中的结果

标签 mysql outer-join self-join

我有一个如下所示的表格。

+------+----------+--------+
|  id  |sender_id |receiver_id|
+------+----------+--------+
|  1   | 1        | 4      |
|  2   | 1        | 34     |
|  3   | 4        | 1      |
|  4   | 11       | 8      |
|  5   | 24       | 4      |
|  6   | 11       | 5      |
+------+----------+--------+

我想看到如下所示的结果。

+------+----------+--------+
|user_id|sent     |receive  |
+------+----------+--------+
|  1   | 2        | 1      |
|  4   | 1        | 2      |
|  5   | 0        | 1      |
|  8   | 0        | 1      |
| 11   | 2        | 0      |
| 24   | 1        | 0      |
| 34   | 0        | 1      |
+------+----------+--------+

我想在一张表中显示我的结果,其中一列 user_id(所有唯一的 sender_id 和receiver_id)作为 user_id,发送(count(sender_id)作为发送,count(receiver_id))作为接收。这样我就可以在一张表中获得每个用户发送和接收消息编号的结果。 我正在尝试自连接查询,但没有得到我预期的结果。

最佳答案

我会使用这个查询:

SELECT user_id, SUM(sent), SUM(receive)
FROM (
  SELECT sender_id AS user_id, COUNT(*) AS sent, 0 AS receive
  FROM tablename
  GROUP BY sender_id
  UNION ALL     
  SELECT receiver_id AS user_id, 0 AS sent, COUNT(*) AS receive
  FROM tablename
  GROUP BY receiver_id
) s
GROUP BY user_id

请参阅 fiddle here .

关于mysql - 自连接查询以获取一张表中的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22896974/

相关文章:

ruby-on-rails - 使用 ActiveRecord 在表上自连接

mysql - MySQL 会为 : 'user' @'' 形式的用户分配什么默认权限

mysql - SELECT 列表不在 GROUP BY 子句中且包含非聚合列?

c# - 使用 MySQL、Entity Framework + Ext.NET 更新记录

oracle - 内连接切换到外连接,标识符无效

MYSQL:基于同一张表的条件,不同列中的相同值

mysql - Qt动态加载MySQL驱动

mysql - 使用 OUTER JOIN 时缺少列数据

c# - LINQ to SQL - 具有多个连接条件的左外连接

mysql - SQL查询分组依据和全部