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

基于AmendDate按年月分组求和Amount的SQLAlchemy查询实现

使用SQLAlchemy实现Loan_Amendment表按年月分组求和

嘿,我来帮你搞定这个SQLAlchemy的查询需求!先把咱们的基础信息理清楚:

原始Loan_Amendment表数据

IDAmountAddDeductAmendDate
LT00001601000.00000000022018-02-08
LT00001701500.0000000012018-02-10
LN00005771000.00000000012018-03-20
LN00005872000.00000000022018-03-20

需求说明

我们需要按AmendDate的年份和月份分组,对Amount字段进行求和。

SQLAlchemy实现代码

这里给你两种常用写法,你可以根据自己用的数据库(比如PostgreSQL、MySQL)来选:

方法1:提取年份和月份单独分组(通用型,适配多数数据库)

假设你的SQLAlchemy模型类是LoanAmendment(对应数据库里的Loan_Amendment表),代码如下:

from sqlalchemy import func

# 构建查询
result = db.session.query(
    # 提取年份并命名为year
    func.year(LoanAmendment.AmendDate).label('year'),
    # 提取月份并命名为month
    func.month(LoanAmendment.AmendDate).label('month'),
    # 对Amount求和并命名为total_amount
    func.sum(LoanAmendment.Amount).label('total_amount')
).group_by(
    # 按年份和月份分组
    func.year(LoanAmendment.AmendDate),
    func.month(LoanAmendment.AmendDate)
).all()

方法2:用date_trunc截断到月份(适合PostgreSQL等支持的数据库)

如果你的数据库支持date_trunc函数,这种写法更简洁,还能直接得到格式化的年月时间对象:

from sqlalchemy import func

result = db.session.query(
    # 把日期截断到月份级别,命名为amend_month
    func.date_trunc('month', LoanAmendment.AmendDate).label('amend_month'),
    func.sum(LoanAmendment.Amount).label('total_amount')
).group_by(
    func.date_trunc('month', LoanAmendment.AmendDate)
).all()

代码细节解释

  • func.year()/func.month():从AmendDate里拆出年份和月份,label()是给结果列起别名,方便你后续从结果里取值。
  • func.sum():对每个分组里的Amount做求和计算,同样用label()给结果列起个好读的名字。
  • group_by():核心的分组逻辑,确保同一年月的记录会被聚合在一起计算总和。
  • .all():执行查询并返回所有结果,比如方法1的结果会是[(2018, 2, 2500.0), (2018, 3, 3000.0)],完全符合需求。

小提醒

  • 确保你的LoanAmendment模型类和数据库表字段对应正确,比如AmendDate要对应表中的AmendDate列。
  • 如果用的是MySQL,func.month()是支持的;如果是SQL Server,可能要换成func.datepart('month', LoanAmendment.AmendDate),具体可以查对应数据库的函数文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:40:02