对表中的值进行求和,该表通过第三个表链接到第二个表

时间:2017-03-05 14:25:51

标签: mysql join

以下是表格和表格的简化列表。他们的专栏:

Table: Sub_Jobs
Columns: ID

Table: Cargo
Columns: ID | Size

Table: Cargo_Assignment
Columns: ID | Sub_Job_ID | Cargo_ID

创建货物并给出尺寸值(数值)。然后通过在Cargo_Assignment表中创建一行将其分配给子作业。

我需要返回分配给该Sub_Job的货物的所有Sub_Jobs ID列表和Cargo.Size的SUM(通过Cargo_Assignment表)。

以下是一些示例数据:

Table: Sub_Jobs
ID
 1
 2 
 3

Table: Cargo
ID Size
 1  3.5
 2  1.2
 3  0.5
 4  1.8

Table: Cargo_Assignment
ID  Sub_Job_ID  Cargo_ID
 1           1         3  
 1           1         1 
 1           2         4

所需的查询结果:

Sub_Job_ID  Total_Size
         1           4 
         2         1.8
         3           0

MySQL是我的弱点,我真的很难与这一点斗争。我已经尝试了几个小时来完成这项工作,并使用不同的连接和子查询等,但我无法绕过它。

这是我尝试过的一个查询,但它只返回一个结果:

SELECT Sub_Jobs.ID, SUM(Cargo.Size) as Total_Size
FROM Sub_Jobs
INNER JOIN Cargo_Assignment ON Cargo_Assignment.Sub_Job_ID = Sub_Jobs.ID
INNER JOIN Cargo ON Cargo.ID = Cargo_Assignment.Cargo_ID

1 个答案:

答案 0 :(得分:1)

您的查询逻辑非常接近。您需要GROUP BY

SELECT sj.ID, SUM(c.Size) as Total_Size
FROM Sub_Jobs sj INNER JOIN
     Cargo_Assignment ca
     ON ca.Sub_Job_ID = sj.ID INNER JOIN
     Cargo c
     ON c.ID = ca.Cargo_ID
GROUP BY sj.ID;

请注意,您不需要JOINSub_Jobs,因为该字段位于Cargo_Assignment

SELECT ca.Sub_Job_ID, SUM(c.Size) as Total_Size
FROM Cargo_Assignment ca INNER JOIN
     Cargo c
     ON c.ID = ca.Cargo_ID
GROUP BY ca.Sub_Job_ID;