mysql - 如何在同一表中的 SQL 连接中使用值的总和

标签 mysql sql

我正在尝试将数据库中的字段更新为其连接值的总和:

我有这个示例数据:

ID  refer_id     my_reflink     s1  s2  m1  m2
-----------------------------------------------
1                      a                1   7
2      a               b                2   8
3      a               c                3   9
4                      d                4   0
5      b               e                5   1
6      c               f                6   2

我需要一个将此结果提供给 s1 和 s2 的查询。

ID  refer_id     my_reflink     s1   s2     m1  m2
----------------------------------------------------
1                      a         5   17     1   7
2      a               b         5   1      2   8
3      a               c         0   0      3   9
4                      d                    4   0
5      b               e         6   2      5   1
6      e               f         0   0      6   2

结果是

  • s1 = refer_id 的 m1 之和 = 每个 ID 的 my_reflink
  • s2 = refer_id 的 m2 总和 = 每个 ID 的 my_reflink

所以对于ID1,它将是

  • s1 = 5 因为 ID 2 和 ID 3 有 ID 1 的 my_reflink 和 m1 = 2 m1 = 3
  • s2 = 17 因为 ID 2 和 ID 3 有 ID 1 的 my_reflink 和 m2 = 8 m2 = 9

最佳答案

更新/连接语法可能会有所不同,具体取决于所使用的 RDBMS,但以下查询适用于 MySql

UPDATE someTable t
JOIN (SELECT refer_id, SUM(m1) sum_m1, SUM(m2) sum_m2
      FROM someTable
      GROUP BY refer_id) s ON s.refer_id = t.my_reflink
 SET s1 = COALESCE(sum_m1, 0), s2 = COALESCE(sum_m2,0)

关于mysql - 如何在同一表中的 SQL 连接中使用值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001250/

相关文章:

mysql - 应用程序无法连接到本地 MySQL - osx

mysql max(日期)不工作

mysql - 从表 WHERE 中选择 x

MySQL - 将 LEFT JOIN 替换为 NOT IN

php - SQL查询PHP网站从Win7到MAMP

mysql - MySQL中如何剔除不符合某些条件的行

mysql - SQL Raw 到 mysql 查询

mysql - Eloquent 表关系

SQL server Left join 子表并获取表名

MySQL On Delete Cascade 删除所有内容