即以下情况:
在 HAVING 和 ORDER BY 子句中使用但在 GROUP BY 子句中遗漏的列。
CREATE TABLE foo(id INT PRIMARY KEY, a INT, b INT);
SELECT a, MAX(b) FROM foo GROUP BY a HAVING b > 0;
SELECT * FROM foo GROUP BY a ORDER BY b;
当按主键进行分组时,此规则不适用。
SELECT * FROM foo GROUP BY id ORDER BY b;
在错误的上下文中聚合函数。 通常,您可以在以下上下文中使用聚合函数: SELECT 中的表达式列表; 在 HAVING 和 ORDER BY 部分; 和其他特定于方言的案例。 以下查询将显示错误。
SELECT a FROM foo WHERE MAX(b) > 0;
SELECT a FROM foo GROUP BY MAX(a);
聚合函数的嵌套调用。
SELECT MAX(SUM(a)) FROM foo GROUP BY a;
此规则不适用于解析函数。 以下查询有效且正确。
SELECT MAX(SUM(a) OVER ()) FROM foo;
没有聚合函数的 HAVING 的用法。 在这种情况下,请考虑使用 WHERE 部分重写您的代码。
SELECT a, MAX(b) FROM foo GROUP BY a HAVING a > 0;