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

基于相同No.Order字段值多费用求和的MySQL查询问题

原SQL存在的问题

  • 求和表达式拼写错误:SUM(Fee1+Fee2+Fee3+Fee+Fee5+Fee6) 中出现了不存在的字段Fee,漏了Fee4字段
  • 分组逻辑不符合需求:目标是按No.Order分组统计全订单总费用,但原语句GROUP BY同时加了City字段,同一个订单下不同城市的记录会被拆分为多个独立分组,无法得到整个订单的合计值
  • 字段选择不符合分组规范:主流数据库要求SELECT子句中的非聚合字段必须出现在GROUP BY子句中,原语句SELECT里的ID、Date、Lic.Plate等字段既没有加入GROUP BY,也没有加聚合函数,执行会直接报错

另外如果你的数据库对带特殊符号的字段名敏感(比如字段名里的.),需要用反引号将这类字段名包裹,比如`No.Order`避免语法错误。


修正后的SQL(分两种场景)

场景1:仅需输出每个订单的总费用(匹配你给出的预期结果)

SELECT 
  `No.Order`,
  SUM(Fee1 + Fee2 + Fee3 + Fee4 + Fee5 + Fee6) AS order_total
FROM tborder 
INNER JOIN tbmobil on tbmobil.idmobil = tborder.idmobil    
INNER JOIN tbsj ON tbsj.noorder = tborder.noorder 
INNER JOIN tbinvdet on tbsj.idsj = tbinvdet.idsj 
LEFT JOIN tbso ON tbso.idsj = tbsj.idsj   
GROUP BY `No.Order`

执行后ORD-00005的order_total为1770000,ORD-00006的order_total为250000,完全符合你的预期。

场景2:需要保留所有明细行,同时每行附带对应订单的总费用

如果需要查看每条记录的原始明细,同时显示所属订单的总费用,可以用窗口函数实现,不需要分组:

SELECT 
  City,
  ID,
  Date,
  `Lic.Plate`,
  `No.Order`,
  Dest,
  Fee1,
  Fee2,
  Fee3,
  Fee4,
  Fee5,
  Fee6,
  SUM(Fee1 + Fee2 + Fee3 + Fee4 + Fee5 + Fee6) OVER (PARTITION BY `No.Order`) AS order_total
FROM tborder 
INNER JOIN tbmobil on tbmobil.idmobil = tborder.idmobil    
INNER JOIN tbsj ON tbsj.noorder = tborder.noorder 
INNER JOIN tbinvdet on tbsj.idsj = tbinvdet.idsj 
LEFT JOIN tbso ON tbso.idsj = tbsj.idsj   

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:39:00