我們有一個'報告生成器',它基本上建立了一系列基於用戶選擇的選項的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