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

多表JOIN与GROUP BY统计异常:用户月度折扣金额求和结果不符

问题排查与SQL修正

首先看你的表结构和关联逻辑,问题出在auth_user和staffuser的关联条件错误上:

你的staffuser表有user_id字段,这个字段应该是关联auth_user表的id(也就是用户的主ID),但你当前SQL里写的是d.id = b.id——这相当于把staffuser的ID直接和auth_user的ID绑定,而不是通过staffuser的user_id关联,这就导致你拿到的first_name根本不是对应service_provider(也就是staffuser)的用户名称,自然匹配错误。

另外,建议你使用显式JOIN语法代替老式的隐式逗号连接,这样关联逻辑更清晰,不容易出错。

修正后的SQL语句

SELECT 
    a.service_provider_id, 
    d.first_name, 
    SUM(a.discounted_price) AS total 
FROM billing_customerservicebill a
JOIN users_staffuser b ON a.service_provider_id = b.id
JOIN auth_user d ON d.id = b.user_id  -- 这里修正了关联条件,用staffuser的user_id关联auth_user的id
JOIN billing_billmanagement c ON a.bill_id = c.id
WHERE c.creation_date BETWEEN '2017-12-01' AND '2017-12-31'
GROUP BY a.service_provider_id, d.first_name
ORDER BY a.service_provider_id;

关键修正点

  • 把d.id = b.id改成d.id = b.user_id,这才是符合你表结构的正确关联逻辑,确保first_name对应到该staffuser所属的auth_user。
  • 改用显式JOIN,让表之间的关联关系一目了然,减少后续维护出错的概率。
  • GROUP BY和ORDER BY里尽量使用完整的字段引用(比如a.service_provider_id而不是1),提升SQL的可读性。

这样执行后,就能得到你期望的结果:每个service_provider_id对应正确的first_name,同时discounted_price的总和也准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:21:59