2017-03-05 64 views
0

這裏連接至第二表中的表中的值是表的簡化列表&它們的列:SUM從經由第三個表

Table: Sub_Jobs 
Columns: ID 

Table: Cargo 
Columns: ID | Size 

Table: Cargo_Assignment 
Columns: ID | Sub_Job_ID | Cargo_ID 

貨物被創建並在給定大小的值(數值) 。然後通過在Cargo_Assignment表中創建一個行,將其分配給一個子作業。

我需要返回所有Sub_Jobs ID的列表以及分配給該子Sub_Job(通過Cargo_Assignment表)的貨物的Cargo.Size的總和。

下面是一些樣本數據:

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

你需要一個[GROUP BY子句(https://開頭開發.mysql.com/doc/refman/5.7/en/group-by-handling.html):'GROUP BY Sub_Jobs.ID' –

回答

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; 
+0

第一部分工作完美,謝謝 - 我認爲這可能與Group By有關。然而第二個修正是拋出一個錯誤:「接近'ON c.ID = ca.Cargo_ID GROUP BY ca.Sub_Job_ID」。只是讓你知道。 – yoshimitsu