mysql sum()读取_在mysql中的不同行上获取SUM()

在MySQL查询中,通过SUM()函数计算表dump中按类别和月份分组的总金额时,发现结果是预期的两倍。问题可能源于连接操作返回了重复行。通过创建一个包含唯一id的临时表dumpwithcat并在此基础上运行查询,可以得到正确的总和。寻求解决此问题的方法,包括可能的子查询或关联优化。
摘要由CSDN通过智能技术生成

我有一个表(“转储”)与交易,我想列出按类别,按月分组的总金额,如:月|类别|类别ID |和 . 涉及的表格如下所示:

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和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;

并在该表上进行查询,一切正常,总和正常 . 有没有办法在原始查询中执行此操作,使用子查询或类似的东西?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值