聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中

时间:2014-12-01 12:05:32

标签: mysql

嘿伙计们,我正在努力寻找产品清单价格高于其类别中产品的双倍平均价格。我做了类似这样的问题,我使用了一个HAVING子句来解决它,但是这个没有用。关于我做错什么的任何建议?

SELECT P.Name             NameOfProduct,
       PC.Name            NameOfProductCategory,
       P.ListPrice        ProductListPrice, 
       AVG(P.ListPrice)   AverageListPrice 
FROM   Product P 
   INNER JOIN ProductCategory PC ON (PC.ProductCategoryID = P.ProductCategoryID)
WHERE (P.ListPrice) > (AVG(P.ListPrice)*2) 
GROUP BY P.Name, PC.Name 

1 个答案:

答案 0 :(得分:1)

如您所知,您不能在having子句中使用聚合函数。您可以使用相关子查询执行所需操作:

SELECT P.Name             NameOfProduct,
       PC.Name            NameOfProductCategory,
       P.ListPrice        ProductListPrice, 
       AVG(P.ListPrice)   AverageListPrice 
FROM Product P INNER JOIN
     ProductCategory PC
     ON PC.ProductCategoryID = P.ProductCategoryID
WHERE P.ListPrice) > (SELECT AVG(p2.ListPrice)*2
                      FROM Product p2
                      WHERE p2.ProductCategoryID = p.ProductCategoryID
                     )
GROUP BY P.Name, PC.Name, P.ListPrice;