我们有一个'报告生成器',它基本上建立了一系列基于用户选择的选项的MySQL查询。来自一系列查询的数据被用来绘制图表。我们运行了一个基于SUM返回不正确值的报表。下面是该查询(我不知道是否有代码在这个网站格式化,所以我只是将其粘贴):MYSQL问题与DISTINCT SUM
SELECT DISTINCT SUM(pp.EffectivePrice)
FROM quotes qu
LEFT JOIN plans pl ON pl.ID = qu.planID AND qu.active_quote = '1'
LEFT JOIN plan_procedures pp ON pp.QuoteID = qu.ID AND qu.active_quote = '1'
LEFT JOIN patients pt ON pt.ID = pl.patientID
LEFT JOIN events_log el7881 ON el7881.TreatmentID = pl.ID
LEFT JOIN events_log el9205 ON el9205.TreatmentID = pl.ID
WHERE el7881.LogDate >= '2011-01-01 00:00:00' AND ((el7881.CurrStageID != '5' AND pt.ID != '') AND (el7881.CurrStageID != '19' AND pt.ID != '')) AND (((CAST(pl.surgery_date AS DATE) BETWEEN '2011-01-01' AND '2011-01-31' AND pl.surgery_date != '') OR (pl.LastSurgeryDate != '0000-00-00 00:00:00' AND CAST(pl.LastSurgeryDate AS DATE) BETWEEN '2011-01-01 00:00:00' AND '2011-01-31 23:59:59')) AND pt.ID != '') AND el9205.LogDate <= '2011-01-31 23:59:59' AND ((el9205.CurrStageID = '4' AND el9205.PrevStageID != '4' AND pt.ID != '')) AND qu.active_quote = '1' AND (pl.doctorID = '6' OR pl.doctorID = '9' OR pl.doctorID = '13')
查询由PHP脚本自动生成的,所以它是令人费解。但是这里的问题很简单:当我运行此查询时,为什么结果值与我在不使用'SUM()'的情况下运行相同查询时不同,并且只是手动将值添加到了?当我手动添加它们时,结果是正确的,但'SUM()'的结果比它应该高。预先感谢您的帮助。
奇怪地删除DISTINCT给了我完全相同的结果(太高)。另一方面,在SUM()中移动DISTINCT会给出比预期更小的值。我不明白。 – user1022643
删除DISTINCT将为您提供与我所解释的相同的值。在SUM内移动DISTINCT可以为您提供不同值的总和。如果你这样做,它应该给你同样的结果,如果你只有DISTINCT,没有SUM,并且自己加上了这些值。 – GolezTrol