Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL和PHP上使用左连接对其他表中的字段求和_Php_Mysql_Sql_Join_Sum - Fatal编程技术网

在MySQL和PHP上使用左连接对其他表中的字段求和

在MySQL和PHP上使用左连接对其他表中的字段求和,php,mysql,sql,join,sum,Php,Mysql,Sql,Join,Sum,我有四张桌子:A桌、B桌、C桌和D桌 TABLE_A id_a | Name A1 | ASD A2 | ZXC TABLE_B id_b | id_a B1 | A1 B2 | A2 TABLE_C id_c | id_b | Value C1 | B1 | 1 C2 | B1 | 1 C3 | B2 | 1 C4 | B2 | 1 C5 | B2 | 1 TABLE_D id_d | id_a | Bill D1 | A1

我有四张桌子:A桌、B桌、C桌和D桌

TABLE_A
id_a | Name
A1   | ASD
A2   | ZXC

TABLE_B
id_b | id_a
B1   | A1
B2   | A2

TABLE_C
id_c | id_b | Value
C1   | B1   | 1
C2   | B1   | 1
C3   | B2   | 1
C4   | B2   | 1
C5   | B2   | 1

TABLE_D
id_d | id_a | Bill
D1   | A1   | 5
D2   | A2   | 10
我想得到每个表的总和(表c.值)为tot1,总和(表d.账单)为tot2,如下所示:

id_a  | SUM_VALUE of table_c | SUM_BILL of table_d
A1    | 2                    | 5
A2    | 3                    | 10
我正在使用以下脚本:

$sql=" SELECT *, SUM(table_c.value) as tot1, SUM(table_d.bill) as tot2
FROM table_a
LEFT JOIN table_b ON table_b.id_a=table_a.id_a
LEFT JOIN table_c ON table_c.id_b=table_b.id_b
GROUP BY id_a ";
但是得到了错误的结果:

id_a  | SUM_VALUE of table_c | SUM_BILL of table_d
A1    | 2                    | 10
A2    | 3                    | 30

有什么想法吗?

首先找到表c的
和值
,然后
将结果与表d的
左连接
,找到表d的
和值
,这样可以避免在
表中求和重复值。试试这个

SELECT F.id_a,
       F.SUM_VALUE_of_table_c,
       Sum(d.Bill) AS SUM_BILL_of_table_d
FROM   (SELECT a.id_a,
               Sum(c.Value) AS SUM_VALUE_of_table_c
        FROM   table_a A
               LEFT JOIN table_b B
                      ON B.id_a = A.id_a
               LEFT JOIN table_c C
                      ON c.id_b = B.id_b
        GROUP  BY a.id_a) F
       LEFT JOIN TABLE_D D
              ON d.id_a = F.id_a 
Group by F.id_a 

您可以在加入之前执行总和计算:

SELECT a.id_a, b.sum_b, c.sum_c
FROM   table_a a
JOIN   table_b b ON a.id_a = b.id_b
JOIN   (SELECT   id_b, SUM(value)
        FROM     table_c
        GROUP BY id_a) c ON b.id_b = c.id_b
JOIN   (SELECT   id_a, SUM(value)
        FROM     table_d
        GROUP BY id_a) c ON a.id_a = d.id_b       
我得到了答案:)


这是不可能的。表b的总账单值重复:(@FedriAndhika-更新,错过
分组人
。添加了演示牙链主控器,请注意:)
SELECT *,
       Sum(bill) AS sum_of_tableD
FROM   table_d,
       table_a
       LEFT JOIN (SELECT *,
                         Sum(table_c.value) AS sum_of_tableC
                  FROM   table_c,
                         table_b
                  WHERE  table_c.id_b = table_b.id_b
                  GROUP  BY id_b) x
              ON x.id_a = USER.id_a
WHERE  table_d.id_a = table_a.id_a