2017-10-13 71 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

我会在一分钟内添加一些信息 –