我有一个表(“转储”)的交易,我想列出的总额,按类别分组,每月,如:本月|类别|类别ID |和。涉及的表是这样的:获取对不同行的SUM()在MySQL
TABLE dump: id INT date DATE event VARCHAR(100) amount DECIMAL(10, 2)
TABLE dump_cat: id INT did INT (id in dump) cid INT (id in categories)
TABLE categories: id INT name VARCHAR(100)
现在,我尝试使用该查询:
SELECT SUBSTR(d.date,1,7) AS month, c.name, c.id AS catid, SUM(d.amount) AS sum FROM dump as d, dump_cat as dc, categories AS c WHERE dc.did = d.id AND c.id = dc.cid AND SUBSTR(d.date, 1, 7) >= '2008-08' GROUP BY month, c.name ORDER BY month;
但对于大多数类别的总和的两倍大,因为它应该。我的猜测是,这是因为连接返回多行,但在字段部分中添加“DISTINCT d.id”没有任何区别。的查询返回的内容的示例是:
+---------+--------------------------+-------+-----------+ | month | name | catid | sum | +---------+--------------------------+-------+-----------+ | 2008-08 | Cash | 21 | -6200.00 | | 2008-08 | Gas | 8 | -2936.19 | | 2008-08 | Rent | 1 | -15682.00 |
其中作为
SELECT DISTINCT d.id, d.amount FROM dump AS d, dump_cat AS dc WHERE d.id = dc.did AND SUBSTR(d.date, 1, 7) ='2008-08' AND dc.cid = 21;
返回
+------+----------+ | id | amount | +------+----------+ | 3961 | -600.00 | | 2976 | -200.00 | | 2967 | -400.00 | | 2964 | -200.00 | | 2957 | -300.00 | | 2962 | -1400.00 | +------+----------+
这样总计3100,一半以上列出的总和。如果我从最后一个查询中删除“DISTINCT d.id”,则每行都列出两次。我认为这是问题,但我需要帮助来弄清楚如何解决它。提前致谢。
补充:如果我收集转储和dump_cat表为一体,具有
CREATE table dumpwithcat SELECT DISTINCT d.id, d.date, d.event, d.amount, dc.cid FROM dump AS d, dump_cat AS c WHERE c.did = d.id;
,并做了查询该表,一切工作正常使用正确的总和。有没有办法在原始查询中做到这一点,与子查询或类似的东西?
如果您取出SUM和GROUP BY并选择金额,您是否看到重复的记录? – 2009-08-27 19:20:37
Eric:是的。我如何摆脱它们? :) – Par 2009-08-27 19:52:29
如果你加入dump和dump_cat你会得到任何重复吗?如何dump_cat和类别? – 2009-08-27 20:26:30