Oracle查询求助:统计商户在Trans1和Trans2中的交易总额
Oracle 查询:汇总商户两表交易金额总和
前提假设
假设Trans1、Trans2表均包含以下核心字段:
MerchantID:与Merchants表关联的商户IDAmount:交易金额字段
方法一:合并交易数据后汇总关联
先通过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未得到预期结果,大概率是两个原因:
INNER JOIN会过滤掉没有任何交易记录的商户,导致部分商户不显示;- 如果未先对交易数据分组汇总就直接关联,可能会因笛卡尔积导致金额重复计算(比如同一商户在两个表有多条记录时,关联后记录数倍增,求和结果偏大)。
内容的提问来源于stack exchange,提问作者Mskhoury
相关产品推荐
相关产品推荐

