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

SQL如何按账户分组并按月汇总各账户grandTotal总和

按账户分月汇总销售额的SQL实现

要实现按ledgerName(账户)分组、统计每个账户各自然月grandTotal总和并排序,只需要在你原有查询基础上增加日期粒度转换、聚合函数、分组和排序逻辑即可。

调整后可直接运行的SQL(以MySQL为例)

SELECT 
    tbl_AccountLedger.ledgerName,
    DATE_FORMAT(tbl_SalesMaster.date, '%Y-%m') AS stat_month,
    SUM(tbl_SalesMaster.grandTotal) AS monthly_grand_total
FROM tbl_SalesMaster
INNER JOIN tbl_AccountLedger 
    ON tbl_SalesMaster.ledgerId = tbl_AccountLedger.ledgerId
GROUP BY
    tbl_AccountLedger.ledgerName,
    DATE_FORMAT(tbl_SalesMaster.date, '%Y-%m')
ORDER BY
    tbl_AccountLedger.ledgerName ASC,
    stat_month ASC;

其他数据库适配说明

你只需要替换语句中日期转年月的函数部分,即可在对应数据库运行:

  • SQL Server:替换为FORMAT(tbl_SalesMaster.date, 'yyyy-MM') 或 DATETRUNC(month, tbl_SalesMaster.date)
  • PostgreSQL:替换为TO_CHAR(tbl_SalesMaster.date, 'YYYY-MM') 或 DATE_TRUNC('month', tbl_SalesMaster.date)
  • Oracle:替换为TO_CHAR(tbl_SalesMaster.date, 'YYYY-MM') 或 TRUNC(tbl_SalesMaster.date, 'MONTH')

注意事项

  • GROUP BY 后的字段必须和SELECT中非聚合计算的字段完全对应,否则会触发分组语法错误
  • 如果需要限定统计的时间范围,在FROM/JOIN语句后、GROUP BY前增加WHERE条件即可,例如统计2024年全年数据可以加:WHERE tbl_SalesMaster.date >= '2024-01-01' AND tbl_SalesMaster.date < '2025-01-01'
  • 当前内连接写法只会返回有交易记录的账户+月份组合,如果需要补全无交易月份的0值汇总,需要先生成账户与全量统计月份的笛卡尔积维表,再左关联交易表做聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:09:34