2017-10-13 72 views
0

我的挑戰如下:我有一個非常簡單的SQL查詢,它從兩個不同的表中獲取值,包括SUM值。使用左連接時簡單的MYSQL查詢總和問題

表1(treatments)如下:

MedicineDescription  |  InitAmount | Cost 
Mybulen     |  90   | 194 

表2(treatmentrecords)如下:

Treatment |  AmountGiven 
Mybulen  |  60 

我的SQL查詢:

SELECT t.MedicineDescription 
    , SUM(t.initAMount) startAmount 
    , SUM(r.AmountGiven) endAmount 
    , SUM(t.Cost) tCost 
    FROM treatments t 
    LEFT 
    JOIN treatmentrecords r 
    ON r.Treatment = t.MedicineDescription 
GROUP 
    BY MedicineDescription 

和最後。結果:

MedicineDescription | StartAmount | EndAmount | tCost 
Mybulen    | 90  | 180.00 | 194 

正如您可以看到開始金額和tcost計算完美,問題只是爲EndAmount返回的SUM不正確。

任何想法將不勝感激!

+0

我無法複製此結果。請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

+0

添加一個計數(*)來顯示選擇找到的記錄數量。 –

+0

檢查http://sqlfiddle.com/#!9/304ec4/1 – KMS

回答

0

您的查詢的問題在Group子句中,您根據第一個表中的字段進行分組。因此,你沒有想要的結果形式在第二張桌子上。嘗試此查詢

SELECT t.MedicineDescription 
    , SUM(t.initAMount) startAmount 
    , r.sumAmountGiven endAmount 
    , SUM(t.Cost) tCost 
    FROM treatments t 
    INNER JOIN (
    SELECT Treatment 
     , SUM(AmountGiven) AS sumAmountGiven 
    FROM treatmentrecords 
    GROUP BY Treatment 
) AS r ON r.Treatment = t.MedicineDescription 
    GROUP BY MedicineDescription 

在這裏,我添加一個子查詢中,我把它命名爲r按照你的舊名。此查詢返回一個關係,該關係有兩列:treatment列和sum(AmountGiven)。這裏的總和根據treatment列分組。之後,連接將和列添加到主查詢中。

+0

我會仔細研究這個答案,因爲它以某種方式起作用。請,你能解釋爲什麼精心加入? – Stiaanvm

+0

我會在一分鐘內添加一些信息 –