Как использовать сумму значений в SQL-соединениях в одной таблице - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь обновить поле в базе данных до суммы его объединенных значений:

У меня есть: Пример данных…

ID  reffer_id   my_refflink     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  reffer_id   my_refflink     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= sum of m1 for reffer_id = my_refflink for each ID
            s2= sum of m2 for reffer_id = my_refflink for each ID

так для ID1:

будет

    s1 =5 because ID 2 and ID 3 have my_refflink of ID 1 and m1=2 m1=3
    s2 =17 because ID 2 and ID 3 have my_refflink of ID 1 and m2=8 m2=9

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Синтаксис обновления / объединения может отличаться в зависимости от используемой СУБД, но приведенный ниже запрос работает для MySql

UPDATE someTable t
JOIN (SELECT reffer_id, SUM(m1) sum_m1, SUM(m2) sum_m2
      FROM someTable
      GROUP BY reffer_id) s ON s.reffer_id = t.my_refflink
 SET s1 = COALESCE(sum_m1, 0), s2 = COALESCE(sum_m2,0)
0 голосов
/ 05 марта 2019

Вы, кажется, хотите join:

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

Если вы хотите на самом деле изменить данные (а не вернуть набор результатов), то синтаксис update зависит от используемой вами базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...