以下の状況が考慮されます。
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;