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

使用AVG、MAX聚合函数分组查询仍返回重复结果问题排查

问题原因与解决方案

核心错误点

  • 错误1:GROUP BY 包含了非维度字段。你需要按销售订单唯一分组,仅需将和销售订单一一对应的维度字段放入分组规则即可,你额外加入了 t3.Export_Date、t4.volume_discount 两个字段,会导致每个不同的日期、不同的返利值都生成独立分组,自然同一个销售订单会出现多行结果。
  • 错误2:聚合函数的冗余写法。(SELECT MAX(t3.Export_Date)) 这类标量子查询完全没必要嵌套,直接写聚合函数即可;而且受错误分组规则的影响,你写的MAX实际上是取当前分组(单条日期)的最大值,相当于没有做聚合计算,AVG同理也是取当前分组(单条返利值)的平均值,完全没有达到计算全订单平均值的效果。
  • 额外说明:你用DISTINCT无效的原因是,重复订单对应的行至少有Last Date或Rebate AVG一个字段值不同,DISTINCT是对整行内容去重,自然无法合并这些行。

修正后的SQL写法

仅需要修改SELECT部分的聚合函数写法、调整GROUP BY的字段即可,你的FROM、WHERE逻辑可以完全保留:

SELECT 
      t1.Name AS [Sales Order No.]
    , t2.name AS [Account Name]
    , MAX(t3.Export_Date) AS [Last Date]  
    , AVG(t4.volume_discount) AS [Rebate AVG]
-- 以下保留你原有的多表关联、筛选条件
FROM 【你的原FROM多表关联逻辑】
WHERE 【你的原WHERE筛选条件】
-- 仅保留两个和销售订单一一对应的维度字段分组
GROUP BY t1.Name, t2.name

效果说明

修正后,同一个销售订单的所有关联数据会被合并为一行:

  • MAX(t3.Export_Date) 会自动取该订单下所有关联日期的最大值,即你需要的最新日期
  • AVG(t4.volume_discount) 会自动计算该订单下所有返利值的平均值
  • 最终每个销售订单仅返回唯一一条结果,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:45:01