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

如何编写SQL查询汇总当年与上年交易收支总额?

问题分析与修正

你的需求完全可以实现,原查询的核心问题是聚合逻辑顺序错误,同时缺少必要的分组操作,导致计算结果偏差。

原查询的错误点

  1. 未使用GROUP BY account_id,且保留了date、debit、credit这类非聚合字段,不符合"按账户年度汇总"的要求,数据库会返回混乱的聚合结果。
  2. 聚合函数SUM()的位置错误:你先对全表的debit/credit做了全局聚合,再用IF判断年份,这会导致所有行都使用同一个全局总和,而非对应年份的分组总和。

修正后的SQL

SELECT 
    account_id,
    -- 2021年总额:credit总和减去debit总和
    SUM(CASE WHEN YEAR(date) = 2021 THEN (credit - debit) ELSE 0 END) AS total_previous,
    -- 2022年总额:credit总和减去debit总和
    SUM(CASE WHEN YEAR(date) = 2022 THEN (credit - debit) ELSE 0 END) AS total_current
FROM
    transaction_lines
WHERE
    account_id = '1021'
    AND date BETWEEN '2021-01-01' AND '2022-12-31'
GROUP BY account_id;

逻辑说明

  • 使用CASE WHEN对每一行先判断所属年份,计算该行的credit - debit(对应预期的正负逻辑),再用SUM()对同一年份的结果累加。
  • 通过GROUP BY account_id确保按账户汇总,得到每个账户的年度总额。
  • 用YEAR(date)简化年份判断,比直接写日期范围更简洁。

执行这个查询后,会得到你预期的结果:

account_id | total_previous | total_current
1021       | -100           | -69

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:37