【问题标题】:MySQL join two tables and add column valuesMySQL连接两个表并添加列值
【发布时间】:2011-02-17 18:03:22
【问题描述】:

我对 MySQL 的了解不是很深入。例如,如果我有两个表如下所示:

Table1
Date        v1  v2  v3
05/01/2010  26  abc 45
05/02/2010  31  def 25
05/03/2010  50  ghi 46

Table2
Date        v1 v2  v3
05/01/2010  42 jkl 15
05/02/2010  28 mno 14
05/03/2010  12 pqr 64

如何按日期将它们加入查询,并获得 table1.v1 和 table2.v1 的总和以及 table1.v3 和 table2.v3 的总和? V2 应该被忽略。

【问题讨论】:

    标签: mysql join sum


    【解决方案1】:

    您可能需要执行以下操作:

    SELECT    t1.date, t1.v1 + t2.v1 AS v1_sum,
              t1.v3 + t2.v3 AS v3_sum
    FROM      table1 t1
    JOIN      table2 t2 ON (t1.date = t2.date);
    

    如果你想要两列的总聚合,你也可以这样做:

    SELECT    SUM(t1.v1 + t2.v1) AS v1_sum,
              SUM(t1.v3 + t2.v3) AS v3_sum
    FROM      table1 t1
    JOIN      table2 t2 ON (t1.date = t2.date);
    

    测试用例:

    CREATE TABLE table1 (`date` date, `v1` int, `v3` int);
    CREATE TABLE table2 (`date` date, `v1` int, `v3` int);
    
    INSERT INTO table1 VALUES ('2010-05-01', 26, 45);
    INSERT INTO table1 VALUES ('2010-05-02', 31, 25);
    INSERT INTO table1 VALUES ('2010-05-03', 50, 46);
    
    INSERT INTO table2 VALUES ('2010-05-01', 42, 15);
    INSERT INTO table2 VALUES ('2010-05-02', 28, 14);
    INSERT INTO table2 VALUES ('2010-05-03', 12, 64);
    

    第一个查询结果:

    +------------+--------+--------+
    | date       | v1_sum | v3_sum |
    +------------+--------+--------+
    | 2010-05-01 |     68 |     60 |
    | 2010-05-02 |     59 |     39 |
    | 2010-05-03 |     62 |    110 |
    +------------+--------+--------+
    

    第二次查询结果:

    +--------+--------+
    | v1_sum | v3_sum |
    +--------+--------+
    |    189 |    209 |
    +--------+--------+
    

    【讨论】:

      【解决方案2】:

      创建表 corse ( id int(11), cname varchar(10),
      cdet varchar(10) );

      然后创建另一个表

      创建表螺柱 ( id int(11),
      名称 varchar(10),
      ssub varchar(10)
      );

      然后在表柱上添加主键

      alter table stud add primary key(id);

      然后在 corse 上应用外键

      alter table corse 添加外键(id) 引用 stud(id);

      这是最后一步,也是最后一步

      select s.id,s.sname,c.cname,c.cdet from stud s join corse c o n s.id=c.id;

      【讨论】:

        猜你喜欢
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-05-06
        • 2015-11-20
        相关资源
        最近更新 更多