在MySQL和PHP上使用左连接对其他表中的字段求和
我有四张桌子:A桌、B桌、C桌和D桌在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
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