【问题标题】:Sum of field from 5 table on MySQLMySQL上5个表的字段总和
【发布时间】:2015-03-13 04:40:49
【问题描述】:

我在 MySQL 上有 5 个表,如下:

Table A
ID-A  | NAME
A1    | Name A
A2    | Name b

Table B
ID-B | ID-A
B1   | A1
B2   | A2

Table C
ID-C | ID-B | Value-C
C1   | B1   |   1
C2   | B2   |   1
C3   | B1   |   1

Table D
ID-D | ID-A  | Value-D
D1   | A1    | 1000
D2   | A1    | 500
D3   | A1    | 1000
D4   | A2    | 1000
D5   | A2    | 500

Table E
ID-E | ID-A  | Value-E
E1   | A1    | 2000
E2   | A1    | 1500
E3   | A2    | 500
E4   | A2    | 500
E5   | A2    | 1000

所以,我想要总和,如下:

1. SUM(Value-C) of Table C AS tot_C for each ID-A of Table A.
2. SUM(Value-D) of Table D AS tot_D 对应表 A 的每个 ID-A
3. 表 E 的 SUM(Value-E) AS tot_E 对应表 A 的每个 ID-A
4 . tot_C+tot_D+tot_E AS tot_ALL 用于表 A 的每个 ID-A

我希望你能帮助我。
谢谢你,亲爱的!

【问题讨论】:

  • 你有没有做过可以展示的尝试。这将使用JOIN 完成,并且有很多关于 SO 的示例,您可以使用这些示例来形成您的示例。
  • 之前,我使用过 JOIN。但是,结果无效。你能给我一个完整的代码吗?谢谢
  • 不要在表/列标识符中使用“-”,甚至在测试/示例代码中也不要使用
  • 当您给我“完成付款”时,我可以给您“完整代码”。 SO 在这里帮助您使用您尝试过的代码,而不是为您完成工作。显示您的尝试给出无效结果,然后我们可以帮助您。

标签: php mysql sql sum


【解决方案1】:
select tb.id_A id_A, sum(valueC) tot_C 
from fiveTablesSum_C tc 
join fiveTablesSum_B tb on tc.id_B = tb.id_B 
group by id_A;
+------+-------+
| id_A | tot_C |
+------+-------+
| A1   |     2 |
| A2   |     1 |
+------+-------+

select id_A id_A, sum(valueD) tot_D from fiveTablesSum_D group by id_A;
+------+-------+
| id_A | tot_D |
+------+-------+
| A1   |  2500 |
| A2   |  1500 |
+------+-------+

select id_A id_A, sum(valueE) tot_E from fiveTablesSum_E group by id_A;
+------+-------+
| id_A | tot_E |
+------+-------+
| A1   |  3500 |
| A2   |  2000 |
+------+-------+

select
    t1.id_A,
    t2.tot_C, t3.tot_D, t4.tot_E,
    t2.tot_C + t3.tot_D + t4.tot_E tot_ALL
from fiveTablesSum_A t1
left join (
    select tb.id_A id_A, sum(valueC) tot_C
    from fiveTablesSum_C tc
    join fiveTablesSum_B tb on tc.id_B = tb.id_B
    group by id_A
) t2 on t1.id_A = t2.id_A
left join (
    select id_A id_A, sum(valueD) tot_D from fiveTablesSum_D group by id_A
) t3 on t1.id_A = t3.id_A
left join (
    select id_A id_A, sum(valueE) tot_E from fiveTablesSum_E group by id_A
) t4 on t1.id_A = t4.id_A
;
+------+-------+-------+-------+---------+
| id_A | tot_C | tot_D | tot_E | tot_ALL |
+------+-------+-------+-------+---------+
| A1   |     2 |  2500 |  3500 |    6002 |
| A2   |     1 |  1500 |  2000 |    3501 |
+------+-------+-------+-------+---------+

【讨论】:

    【解决方案2】:

    对于您的第一个查询,请尝试如下方式

    SELECT 
        SUM(TableC.Value-C) as tot_C,TableC.ID-C
    FROM
        TableC
            JOIN
        TableB ON TableB.ID-B = TableC.ID-B
            JOIN
        TableA ON TableA.ID-A = TableB.ID-A;
    

    同样你也可以尝试其他查询,你应该看看如何使用JOINS

    【讨论】:

    • 我试过这样。对于 SUM(VALUE-C) 是成功的。但是对于表 C 和表 D 的 SUM 是错误结果
    • 你能给我一个完整的代码吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2016-03-18
    相关资源
    最近更新 更多