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

基于Group By与SUM函数计算供应商实际付款总额并找出最高支出供应商

解决方法:正确计算供应商支出并找出最高支出者

核心思路

通过CASE表达式根据InvoiceType动态调整金额正负(Credit类型记为负数),仅统计CurrentStatus = 'Paid'的记录,按供应商分组求和后,排序取总额最高的记录。

正确的SQL查询

SELECT TOP 1
       SupplierID,
       SUM(CASE 
           WHEN InvoiceType = 'Credit' THEN -InvoiceTotal
           ELSE InvoiceTotal
       END) AS TotalSpent
FROM Supplier_Invoices
WHERE CurrentStatus = 'Paid'
GROUP BY SupplierID
ORDER BY TotalSpent DESC

你的第二个查询返回NULL的原因

当某个供应商没有Debit或Credit类型的发票时,对应的子查询SUM()会返回NULL,而NULL参与算术运算(比如数值 - NULL)的结果仍为NULL,最终导致所有TotalAmt显示为NULL。

更优实现说明

上面的查询仅需一次表扫描即可完成所有逻辑,比嵌套子查询更高效:

  • 一步过滤出Paid状态的记录
  • 用CASE实时调整金额正负,避免多次重复扫描表
  • 分组后直接排序取TOP1,逻辑清晰且性能更优

示例数据验证

代入你提供的测试数据,计算结果如下:

  • SUP-1: 1200 - 600 = 600.00
  • SUP-2: 400 + 300 = 700.00
  • SUP-3: -20000.00
  • SUP-4: 未统计(状态为Unpaid)

最终返回SUP-2,完全符合预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:52:40