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

如何通过SQL基于两个年度分组汇总查询计算出口总额与进口总额的差值?

解决思路:合并出口/进口总额计算并求差值

针对你的需求,有两种高效的实现方式,我分别给你拆解说明:

方法一:使用JOIN连接两个子查询结果

把你已有的两个查询作为子表,通过year字段做连接,直接计算出口减进口的差值。这种方式逻辑直观,和你原本的思路衔接非常紧密:

SELECT 
    t1.year,
    (t1.TE - t2.TI) AS TradeBalance
FROM 
    (SELECT year, Sum(amount) AS TE 
     FROM tradeinfo 
     WHERE tradetype = 'Export'  -- 这里用=比LIKE更高效,因为是精确匹配场景
     GROUP BY year) t1
JOIN 
    (SELECT year, Sum(amount) AS TI 
     FROM tradeinfo 
     WHERE tradetype = 'Import'
     GROUP BY year) t2 ON t1.year = t2.year
ORDER BY t1.year;

补充:如果某些年份只有出口或只有进口数据,内连接会过滤掉这些年份。如果需要保留所有年份(哪怕其中一项为0),可以改用FULL OUTER JOIN,并配合COALESCE处理NULL值:

SELECT 
    COALESCE(t1.year, t2.year) AS year,
    COALESCE(t1.TE, 0) - COALESCE(t2.TI, 0) AS TradeBalance
FROM 
    (SELECT year, Sum(amount) AS TE 
     FROM tradeinfo 
     WHERE tradetype = 'Export'
     GROUP BY year) t1
FULL OUTER JOIN 
    (SELECT year, Sum(amount) AS TI 
     FROM tradeinfo 
     WHERE tradetype = 'Import'
     GROUP BY year) t2 ON t1.year = t2.year
ORDER BY year;

方法二:使用条件聚合(更简洁高效)

不需要拆分两个子查询,直接在一个GROUP BY里通过CASE语句分别计算出口和进口总额,然后求差值。这种方式只需要扫描一次表,性能更优:

SELECT 
    year,
    SUM(CASE WHEN tradetype = 'Export' THEN amount ELSE 0 END) AS TE,
    SUM(CASE WHEN tradetype = 'Import' THEN amount ELSE 0 END) AS TI,
    SUM(CASE WHEN tradetype = 'Export' THEN amount ELSE 0 END) - 
    SUM(CASE WHEN tradetype = 'Import' THEN amount ELSE 0 END) AS TradeBalance
FROM tradeinfo
WHERE tradetype IN ('Export', 'Import')  -- 过滤掉无关的交易类型,减少计算量
GROUP BY year
ORDER BY year;

如果只需要年份和差值列,还可以简化成更巧妙的写法:

SELECT 
    year,
    SUM(CASE WHEN tradetype = 'Export' THEN amount ELSE -amount END) AS TradeBalance
FROM tradeinfo
WHERE tradetype IN ('Export', 'Import')
GROUP BY year
ORDER BY year;

这个简化版的逻辑是:出口金额加正值,进口金额加负值,最终求和结果就是TE-TI,代码更精简。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:47:40