【问题标题】:How to Join two tables and sum their columns across in Mysql based on distinct column如何根据不同的列在 Mysql 中连接两个表并汇总它们的列
【发布时间】:2019-01-04 22:06:48
【问题描述】:

我将通过 regNo 列加入两个表。我想添加 regNo 匹配的 Table1.points 和 Table2.points 点,以防万一它不匹配我还希望它包含在列表中的点中,如下图所示

我已经阅读了现有的问题,但没有找到解决方案,例如How can I sum columns across multiple tables in 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 排列的列表

【问题讨论】:

    标签: mysql join outer-join


    【解决方案1】:

    您需要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
    

    【讨论】:

    • 非常感谢,这很简单,很适合我的情况。
    【解决方案2】:

    您正在两个表之间寻找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
    

    【讨论】:

    • 我对 ID 生成不太感兴趣。我只想要上面显示的唯一 regNo 和两个表的总和
    • @JOB ok 所以第一个查询应该对工作就好了
    【解决方案3】:

    请检查这个。您需要在聚合之前使用full outer join 和 null 替换

    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)
    

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 1970-01-01
      • 2018-10-14
      • 2019-12-18
      • 1970-01-01
      • 2013-12-14
      • 2015-02-26
      • 1970-01-01
      • 2017-07-11
      相关资源
      最近更新 更多