使用左连接时的简单MYSQL查询总和问题

时间:2017-10-13 07:05:43

标签: mysql left-join

我的挑战如下:我有一个非常简单的SQL查询,它从两个不同的表中获取值,包括SUM值。

表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不正确。

任何想法都将受到赞赏!

1 个答案:

答案 0 :(得分: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列进行分组。之后,连接将sum列添加到主查询。