SQL:使用AVG和MAX聚合函数,但仍返回重复函数



我有一个select语句,它要求4个字段。一个是MAX(date_field(,date类型,我想要最新日期,另一个是AVG(dollars_field(,float类型,我希望函数获得这些$金额的平均值,并只返回一个,按其销售订单分组,这是该查询的第一个字段。

返回的结果是重复的,如下所示-我尝试过不同的,按不同的方式分组,但它仍然返回重复的。我错过了什么

SELECT 
t1.Name AS [Sales Order No.]
, t2.name AS [Account Name]
, (SELECT MAX(t3.Export_Date)) AS [Last Date]  
, (SELECT AVG(t4.volume_discount)) AS [Rebate AVG]

然后我有了带有联接表的FROM子句,以及带有一些筛选器的WHERE子句,最后:

GROUP BY t1.Name, t4.volume_discount, t2.name, t3.Export_Date

这就是它的回报:

Sales Order No. Account Name    Rebate AVG  Last Date
SO-001      Nova Account Inc    96.000000   2020-06-24
SO-002      Acme                534.000000  2020-06-29
SO-002      Acme                534.000000  2020-07-02
SO-002      Acme                534.000000  2020-09-30
SO-002      Acme                424.000000  2020-07-23
SO-003      New Account Co      1603.000000 2020-09-30

理想情况下,SO-002行将显示一次,包括最新日期(MAX(和所有这些回扣金额的AVG。

  1. 您使用的是关联查询或子查询(每行一个值(,因此您可以看到"重复">
  2. 您只需要按t1.name、t2.name使用Group
SELECT
t1.Name
, t2.name
, MAX(t3.Export_Date) as Export_Date
, AVG(t4.volume_discount) as volume_discount
from
t1
inner join t2 on t2.id = t1.id
...
Group by t1.name, t2.name
  1. 最好使用WITH子句通过子查询对查询进行逻辑拆分所以你的";"重复";加入前需要删除如果你提供完整的数据样本查询,我可以提供更精确的答案

最新更新