使用两个LEFT JOIN和GROUP BY时,SUM不正确

时间:2014-09-12 19:36:54

标签: mysql sql

以下代码返回sumHours字段的错误值。看起来准备sumHours字段然后一旦GROUP BY运行,将总和加在一起。

SELECT mmr_ID, mmr_projectName, SUM(mmr_hoursWorked.mmr_hoursWorked_hours) AS sumHours
FROM mmr 
LEFT JOIN mmr_hoursWorked
ON mmr.mmr_ID = mmr_hoursWorked.mmr_hoursWorked_project AND mmr_hoursWorked.mmr_hoursWorked_mm = "P90826"
LEFT JOIN mmr_notes
ON mmr.mmr_ID = mmr_notes.mmr_notes_MMR_ref AND mmr_notes.mmr_notes_author = "P90826"
WHERE mmr_mmAssigned = "P90826" AND mmr_projectStatus != 1 OR mmr_notes.mmr_notes_author = "P90826" AND mmr_projectStatus != 1 
GROUP BY mmr_ID

实际结果

mmr_ID - 35
mmr_projectName - 项目A
sumHours - 140.2

预期结果

mmr_ID - 35
mmr_projectName - 项目A
sumHours - 35.05

2 个答案:

答案 0 :(得分:0)

由于JOIN语句返回了结果组合,因此您应该分别处理聚合和连接。试试这个:

SELECT t.*
FROM
(
    SELECT mmr_ID, mmr_projectName, SUM(mmr_hoursWorked.mmr_hoursWorked_hours) AS sumHours
    FROM mmr 
    LEFT JOIN mmr_hoursWorked
    ON mmr.mmr_ID = mmr_hoursWorked.mmr_hoursWorked_project AND mmr_hoursWorked.mmr_hoursWorked_mm = 'P90826'
    WHERE mmr_projectStatus != 1 AND mmr_mmAssigned = 'P90826'
    GROUP BY mmr_ID, mmr_projectName, mmr_mmAssigned
) t
LEFT JOIN mmr_notes
ON t.mmr_ID = mmr_notes.mmr_notes_MMR_ref 
WHERE mmr_notes.mmr_notes_author = 'P90826';

答案 1 :(得分:0)

通过规范化数据库纠正了该问题。 mmr_notes表已集成到mmr_hoursWorked表中,因为它只有一个唯一字段。