2017-10-13 14 views
0

私の挑戦は次のとおりです。SUM値を含む2つの異なるテーブルから値をとる非常に単純なSQLクエリがあります。次のように左の結合を使用した場合の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句にあり、最初のテーブルのフィールドに従ってグループ化しています。したがって、あなたは2番目のテーブルから必要な結果を得られませんでした。ここ

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名付けましたが、サブクエリを追加しました。このクエリは、2つの列、treatment列とsum(AmountGiven)を持つリレーションを返します。ここでの合計は、treatmentの列に従ってグループ化されています。その後、結合によって合計の列がメインのクエリに追加されます。

+0

私はこの答えをどうにかして慎重に研究していきます。どうしてそんなに精巧に参加するのか説明できますか? – Stiaanvm

+0

1分で情報を追加します –

関連する問題