mysqlworkbench中的此查询有什么问题?

时间:2020-03-15 22:02:07

标签: mysql sql group-by average

SELECT Product_Finish AS "Desk Finish",    
  AVG(Standard_Price) AS "Average Price"
FROM Product_T
WHERE "Average Price">300
ORDER BY "Average Price" DESC;

我做错了什么?

1 个答案:

答案 0 :(得分:1)

有几个问题:

  • 您使用聚合函数AVG(),但查询中没有GROUP BY子句

  • where子句是指聚合列;您必须为此使用having子句

  • 标识符用双引号引起来; MySQL希望反引号

所以:

SELECT Product_Finish AS `Desk Finish`, AVG(Standard_Price) AS `Average Price`
FROM Product_T
GROUP BY Product_Finish
HAVING `Average Price`> 300
ORDER BY `Average Price` DESC;

更好的方法是使用不需要引用的标识符。另外,值得注意的是,与MySQL不同,并非所有数据库都在having子句中支持列别名(在这种情况下,您需要重复聚合表达式)。这是标准的SQL:

SELECT Product_Finish AS desk_finish, AVG(Standard_Price) AS average_price
FROM Product_T
GROUP BY Product_Finish
HAVING AVG(Standard_Price) > 300
ORDER BY average_price DESC;