You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL查询仅统计当月来源ID对应的金额总和

解决方案:获取指定来源当月的金额总和

嗨,我来帮你调整这个查询~ 你原来的语句是把source='1'的所有数据按月份分组求和,但现在只需要当月的总和,那我们只需要在WHERE条件里精准过滤出当月的数据,再直接求和就可以啦,不需要GROUP BY了。

推荐写法(性能更优)

这种写法利用范围查询,能用上**for_date字段的索引**,数据量大的时候效率更高:

SELECT SUM(amount) AS amountSum 
FROM Flow 
WHERE source='1' 
  AND for_date >= DATE_FORMAT(NOW(), '%Y-%m-01') 
  AND for_date < DATE_FORMAT(NOW(), '%Y-%m-01') + INTERVAL 1 MONTH;
  • DATE_FORMAT(NOW(), '%Y-%m-01')会生成当月的第一天(比如现在是2024年5月,就返回2024-05-01)
  • 加上INTERVAL 1 MONTH后得到下个月第一天,用<这个日期就能确保只包含当月的所有数据,不会漏掉最后一天的晚时段记录(比如2024-05-31 23:59:59也会被正确包含)

另一种写法(逻辑直观但性能稍差)

如果你的数据量不大,也可以用月份和年份匹配的方式,但这种写法因为用函数包裹了for_date,会导致字段上的索引失效:

SELECT SUM(amount) AS amountSum 
FROM Flow 
WHERE source='1' 
  AND MONTH(for_date) = MONTH(NOW()) 
  AND YEAR(for_date) = YEAR(NOW());

说明

两种写法都能得到source='1'当月的金额总和,但优先推荐第一种范围查询的方式,尤其是在表数据较多的时候,性能差异会很明显。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:44:29