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

按日期计算tblWithdraw总Price与tblProfit总Amount差值的SQL查询问题求助

解决SQL汇总计算错误的问题

我来帮你搞定这个查询问题!你的原SQL出现错误结果,核心原因是直接关联两张未汇总的表产生了笛卡尔积:tblWithdraw在2021-02-09有7条记录,tblProfit同日期有4条记录,连接后会生成7×4=28条重复数据,导致SUM计算时把取款金额重复加了4次、利润金额重复加了7次,最终得到的是错误的放大值。

正确的解决思路

先分别对两张表按日期独立汇总,再将汇总后的结果关联,这样就能彻底避免重复计算的问题。

修正后的SQL查询

SELECT 
    -- 取存在的日期,避免某张表无对应日期时出现NULL
    COALESCE(w.Date, p.Date) AS Date,
    -- 处理无取款记录的日期,默认填充0
    COALESCE(w.TotalWithdraw, 0) AS TotalWithdraw,
    -- 处理无利润记录的日期,默认填充0
    COALESCE(p.TotalProfit, 0) AS TotalProfit,
    -- 计算扣除取款后的利润差值
    (COALESCE(w.TotalWithdraw, 0) - COALESCE(p.TotalProfit, 0)) AS NetProfitAfterWithdraw
FROM 
    -- 先汇总tblWithdraw的每日取款总额
    (SELECT Date, SUM(Price) AS TotalWithdraw FROM tblWithdraw GROUP BY Date) w
-- 用全连接确保某一天只有取款或只有利润时也能正常显示
FULL JOIN 
    -- 先汇总tblProfit的每日利润总额
    (SELECT Date, SUM(Amount) AS TotalProfit FROM tblProfit GROUP BY Date) p
ON 
    w.Date = p.Date;

验证结果

根据你提供的数据计算:

  • tblWithdraw的当日取款总和:2000+300+1500+4000+340+200+120 = 8460.00
  • tblProfit的当日利润总和:9500+20580+24000+10800 = 64880.00
  • 最终差值:8460.00 - 64880.00 = -56420.00

这个结果就是你需要的扣除取款额后的利润总金额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:42:47