首页 > 解决方案 > mysqlworkbench 中的这个查询有什么问题?

问题描述

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

我做错了什么?

标签: mysqlsqlgroup-byaverage

解决方案


有几个问题:

  • 您使用聚合函数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;

推荐阅读