【问题标题】:SQL Server 2012 Enterprise: Cannot perform an aggregate function on an expression containing an aggregate or a subquery?SQL Server 2012 Enterprise:无法对包含聚合或子查询的表达式执行聚合函数?
【发布时间】:2014-03-11 00:13:33
【问题描述】:

我正在尝试编写一个查询,以查找平均产品价格最高的品牌的品牌 ID、品牌名称、品牌类型和产品平均价格。这是我得到的:

SELECT  LGBrand.Brand_ID, Brand_Name, Brand_Type, MAX(AVG(Prod_Price))
AS      AvgPrice
FROM    LGProduct, LGBrand
GROUP BY    LGBrand.Brand_ID, Brand_Name, Brand_Type
ORDER BY AvgPrice DESC

我对 SQL 很陌生。之前我有没有“MAX”命令的相同代码,但它带回了输出中所有品牌的平均值。

不太清楚该去哪里。

【问题讨论】:

  • 您能解释一下您要做什么吗?如果您使用相同的分组,则不能有 MAX(AVG(price)),如果平均值为 5,则最小值和最大值也是 5。您是否要获得平均价格和最高价格?或者你想要按品牌的平均价格,然后是平均品牌的最大结果?请详细说明预期结果。
  • 另外,你为什么要交叉加入 LGProduct 和 LGBrand?我很确定你想在那里真正加入。另外,不要在 FROM 子句中使用那种古老的逗号(“,”)语法,它只会导致意外的交叉连接。请改用显式 FROM..JOIN.. 语法。
  • 预期结果应该是表格中的一行信息,保持产品平均价格最高的品牌名称。

标签: sql-server sql-server-2012


【解决方案1】:

TOP 1 不会给你想要的吗?

SELECT  TOP 1 LGBrand.Brand_ID, Brand_Name, Brand_Type, AVG(Prod_Price) AS Avg_Prod_Price
FROM    LGProduct, LGBrand
GROUP BY    LGBrand.Brand_ID, Brand_Name, Brand_Type
ORDER BY Avg_Prod_Price DESC

【讨论】:

  • 这实际上给出了比我得到的更好的答案,但是根据这本书(这是一个家庭作业),这不是正确的答案。我要去摆弄它,看看我能不能让它给出正确的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
相关资源
最近更新 更多