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

Oracle查询求助:统计商户在Trans1和Trans2中的交易总额

Oracle 查询:汇总商户两表交易金额总和

前提假设

假设Trans1、Trans2表均包含以下核心字段:

  • MerchantID:与Merchants表关联的商户ID
  • Amount:交易金额字段

方法一:合并交易数据后汇总关联

先通过UNION ALL合并两个交易表的所有记录,再与商户表关联并按商户分组求和,确保所有商户(包括无交易的)都能显示:

SELECT 
    m.MerchantID,
    m.name,
    COALESCE(SUM(t.Amount), 0) AS TotalAmount
FROM 
    Merchants m
LEFT JOIN (
    -- 合并两个交易表的交易记录
    SELECT MerchantID, Amount FROM Trans1
    UNION ALL
    SELECT MerchantID, Amount FROM Trans2
) t ON m.MerchantID = t.MerchantID
GROUP BY 
    m.MerchantID, m.name
ORDER BY 
    m.MerchantID;

方法二:分别汇总两表后合并计算

先单独对两个交易表按商户汇总金额,再关联商户表计算总金额,适合交易数据量较大的场景:

SELECT 
    m.MerchantID,
    m.name,
    -- 用COALESCE处理无交易的情况,将NULL转为0
    COALESCE(t1.Total1, 0) + COALESCE(t2.Total2, 0) AS TotalAmount
FROM 
    Merchants m
-- 关联Trans1的汇总数据
LEFT JOIN (
    SELECT MerchantID, SUM(Amount) AS Total1
    FROM Trans1
    GROUP BY MerchantID
) t1 ON m.MerchantID = t1.MerchantID
-- 关联Trans2的汇总数据
LEFT JOIN (
    SELECT MerchantID, SUM(Amount) AS Total2
    FROM Trans2
    GROUP BY MerchantID
) t2 ON m.MerchantID = t2.MerchantID
ORDER BY 
    m.MerchantID;

常见问题说明

你之前用UNION ALL结合INNER JOIN未得到预期结果,大概率是两个原因:

  1. INNER JOIN会过滤掉没有任何交易记录的商户,导致部分商户不显示;
  2. 如果未先对交易数据分组汇总就直接关联,可能会因笛卡尔积导致金额重复计算(比如同一商户在两个表有多条记录时,关联后记录数倍增,求和结果偏大)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:35:09