php - 在 MySQL 和 PHP 上使用 Left Join 对其他表中的字段求和

标签 php mysql sql join sum

我有四个表:Table_A、Table_B、Table_C 和 Table_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

我想为每个 table_a.id_a 获取 SUM(table_c.value) 作为 tot1 和 SUM(table_d.bill) 作为 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

有什么想法吗?

最佳答案

您可以在加入前进行求和计算:

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       

关于php - 在 MySQL 和 PHP 上使用 Left Join 对其他表中的字段求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522433/

相关文章:

php - 如何在SQL或PHP中将decimal(16,4)转换为DATE或DATETIME

尝试使用 CodeIgniter 和 MongoDB 驱动程序将集合插入 MongoDB 时出现 PHP 错误

mysql - 集成sql select语句

MySQL默认值基于 View

sql - 在这种情况下如何避免嵌套的 SQL 查询?

sql - SQL中如何将外键设为NULLABLE?

php - MYSQL表根据日期自动更新

php - 更正PHP中的编程错误

php - 多个连接上的 orderby 语句

sql - 如何在SQL中将记录的首字母大写