MySQL Error number: 3066; Symbol: ER_AGGREGATE_IN_ORDER_NOT_SELECT; SQLSTATE: HY000

文档解释

Error number: 3066; Symbol: ER_AGGREGATE_IN_ORDER_NOT_SELECT; SQLSTATE: HY000

Message: Expression #%u of ORDER BY clause is not in SELECT list, contains aggregate function; this is incompatible with %s

错误说明

ER_AGGREGATE_IN_ORDER_NOT_SELECT错误是MySQL返回的一种数据库错误,表明您在SELECT子句中使用了SQL聚合函数(例如SUM,AVG,MIN和MAX),但ORDER BY子句中没有包含它们。ORDER BY子句仅用于查询指定的行而不是聚合操作。

常见案例

ER_AGGREGATE_IN_ORDER_NOT_SELECT错误最常见的案例是,当您试图执行SELECT查询时,其ORDER BY子句中使用SQL聚合函数而不是表中的列时,可能会出现此错误。例如,如果您尝试使用以下查询执行查询,则可能会得到此错误

SELECT id,size, sum(price)

FROM orders

ORDER BY sum(price);

解决方法

要解决ER_AGGREGATE_IN_ORDER_NOT_SELECT错误,首先需要确保ORDER BY子句中不使用聚合函数。SQL不允许您使用聚合函数来对查询的结果进行排序,因为排序涉及每一行,而聚合函数只是对数据库中的所有行进行汇总。应该使用ORDER BY子句对表中的列进行排序,如例所示:

SELECT id,size, sum(price)

FROM orders

ORDER BY size;

请注意,如果要显示排序使用的聚合字段,可以使用HAVING子句,例如:

SELECT id, size, sum(price)

FROM orders

GROUP BY size

HAVING sum(price) > 10

ORDER BY size;

确保ORDER BY子句中不包含任何聚合函数以解决ER_AGGREGATE_IN_ORDER_NOT_SELECT错误,应该是解决此问题的最好方法。此外,可以使用HAVING子句来实现不使用聚合函数、但仍然显示聚合函数的效果。

你可能感兴趣的