2012-07-18 179 views
0

我已经得到了这个查询,并且我想SUM按列omschrijving分组的查询的所有结果。MYSQL与SUM结果和GROUP BY

查询

SELECT b.BoekRegelBedrag as total, c.omschrijving, ctl.vd1, b.BoekRegelId 
FROM condensations as c 
LEFT JOIN condensations_to_ledgers as ctl 
    ON ctl.vd1 = c.code 
LEFT JOIN BoekstukRegels as b 
    ON b.BoekRegelGrootboekNr = ctl.GrootboekNummer 
LEFT JOIN GrootboekRekeningen as g 
    ON g.GrootboekNummer = ctl.GrootboekNummer 
WHERE c.bedrijf_id = 118 
    AND b.BoekregelUserId = 118 
    AND ctl.bedrijf_id = 118 
    AND g.GrootboekUserId = 118 
    AND c.code < 10 
    AND g.BaSoort = 2 
    AND b.BoekRegelPeriode BETWEEN 201000 AND 201013 
GROUP BY b.BoekRegelId 

有没有一种简单的方法来做到这一点?

EDIT

我试图SUM BoekRegelBedrag但随后每个记录以一种方式或其它凝聚了一部分,并且我得到一个结果的4个结果而不是与总相加列

+0

你能这些名字翻译成英文,因为它会更容易理解? – arnep 2012-07-18 11:54:43

+0

无需将名称解码为英文。有必要指定结果中的哪些列应加总。 – 2012-07-18 11:56:59

+0

@JonathanLeffler列b.BoekRegelBedrag应加总。 – 2012-07-18 12:01:28

回答

1

既然你没有明确规定哪一列应该被总结,我们必须猜测。假设BoekRegelId列不应该被归纳(基本没有什么意义上做的ID号码算术)— 再没有总结ctl.vd1根据注释 —则:

SELECT omschrijving, SUM(total) AS sum_total 
    FROM (SELECT b.BoekRegelBedrag as total, c.omschrijving, ctl.vd1, b.BoekRegelId 
      FROM condensations AS c 
      LEFT JOIN condensations_to_ledgers AS ctl 
      ON ctl.vd1 = c.code 
      LEFT JOIN BoekstukRegels   AS b 
      ON b.BoekRegelGrootboekNr = ctl.GrootboekNummer 
      LEFT JOIN GrootboekRekeningen  AS g 
      ON g.GrootboekNummer = ctl.GrootboekNummer 
     WHERE c.bedrijf_id = 118 
      AND b.BoekregelUserId = 118 
      AND ctl.bedrijf_id = 118 
      AND g.GrootboekUserId = 118 
      AND c.code < 10 
      AND g.BaSoort = 2 
      AND b.BoekRegelPeriode BETWEEN 201000 AND 201013 
     GROUP BY b.BoekRegelId 
     ) AS I 
    GROUP BY omschrijving; 

基本上,我使用的是原始查询结果作为FROM子句中的“表”,然后以某种方式在其列上进行聚合,这可能是您所追求的目标。

的替代,简单的方法也可能是可行的,如果核心查询接近你想要的东西:

SELECT c.omschrijving, SUM(b.BoekRegelBedrag) as total 
    FROM condensations AS c 
    LEFT JOIN condensations_to_ledgers AS ctl ON ctl.vd1 = c.code 
    LEFT JOIN BoekstukRegels   AS b ON b.BoekRegelGrootboekNr = ctl.GrootboekNummer 
    LEFT JOIN GrootboekRekeningen  AS g ON g.GrootboekNummer = ctl.GrootboekNummer 
WHERE c.bedrijf_id = 118 
    AND b.BoekregelUserId = 118 
    AND ctl.bedrijf_id = 118 
    AND g.GrootboekUserId = 118 
    AND c.code < 10 
    AND g.BaSoort = 2 
    AND b.BoekRegelPeriode BETWEEN 201000 AND 201013 
GROUP BY c.omschrijving; 
+0

非常感谢!你的答案完成了这项工作! – 2012-07-18 12:09:13