Как объединить две таблицы и суммировать их столбцы в Mysql на основе отдельных столбцов - PullRequest
0 голосов
/ 05 января 2019

Я соединяю две таблицы по столбцу regNo. Я хочу добавить точки Table1.points и Table2.points, где regNo совпадает, и только в том случае, если оно не совпадает. Я также хочу, чтобы оно было включено с его точками в список, как показано на рисунке ниже. expected results From the two table1& table2

Я прочитал существующие проблемы, но не нашел решения, например. Как можно суммировать столбцы по нескольким таблицам в MySQL?

(
    SELECT `Ex`.regNo,(`In`.`points`+`Ex`.`points`) AS 'Points' 
    FROM Table1`In` 
    LEFT JOIN Table2`Ex` ON `In`.`regNo` = `In`.`regNo`
)
UNION
(
    SELECT`Ex`.regNo,(`In`.`points`+`Ex`.`points`) AS 'Points' 
    FROM Table1`In` 
    RIGHT JOIN Table2`Ex` ON `In`.`regNo` = `In`.`regNo`
);

Я хочу дать список, упорядоченный по уникальному (DISTINCT) regNo

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Пожалуйста, проверьте это. Вам нужно использовать full outer join и нулевую замену до агрегирования

select 
   COALESCE(table1.regno, table2.regno) regno,
   sum(COALESCE(table1.points,0)) + sum(COALESCE(table2.points,0)) points
from Table1 
full outer join Table2 
  on table1.regno = table2.regno
group by 
  COALESCE(table1.regno, table2.regno)
0 голосов
/ 05 января 2019

Вам нужно UNION, а затем GRoUP BY:

SELECT regNo, SUM(points) AS total
FROM (
    SELECT regNo, points
    FROM Table1

    UNION ALL

    SELECT regNo, points
    FROM Table2
) AS u
GROUP BY regNo
0 голосов
/ 05 января 2019

Вы ищете FULL JOIN между обеими таблицами.

SELECT 
    COALESCE(t1.id, t2.id) id
    COALESCE(t1.regNo, t2.regNo) regNo
    COALESCE(t1.points, 0) +  COALESCE(t2.points 0) points
FROM
    table1 t1
    FULL JOIN table2 t2 on t1.regNo = t2.regNo

Примечание: вы не указали, что вы ожидаете сделать для генерации нового id, поэтому по умолчанию в приведенном выше запросе будет отображаться table1.id, если доступно, иначе table2.id.

Если вы хотите сгенерировать новое, автоматически увеличивающееся поле, то:

SET @i=0;
SELECT 
    @i:=@i+1 id
    COALESCE(t1.regNo, t2.regNo) regNo
    COALESCE(t1.points, 0) +  COALESCE(t2.points 0) points
FROM
    table1 t1
    FULL JOIN table2 t2 on t1.regNo = t2.regNo
...