繁体   English   中英

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

[英]How to use sum of values in SQL joins in same table

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

我有这个示例数据:

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 和 m1 = 2 m1 = 3 的my_reflink
  • s2 = 17 因为 ID 2 和 ID 3 具有 ID 1 和 m2 = 8 m2 = 9 的my_reflink

根据所使用的 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)

你似乎想要join

select t.ID, t.refer_id, t.my_reflink, tt.m1, tt.m2,
       t.m1, t.m2
from t left join
     (select refer_id, sum(m1) as m1, sum(m2) as m2
      from t
      group by refer_id
     ) tt
     on t.my_reflink = tt.refer_id;

如果要实际更改数据(而不是返回结果集),则update语法取决于您使用的数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM