メインコンテンツまでスキップ

グループ error class

SQLSTATE: 42903

集計関数はグループ BY では使用できませんが、 <sqlExpr>で見つかります。

パラメーター

  • sqlExpr : 集計関数を含む式。

説明

GROUP BY句の目的は、個別のグループのセットを識別することです。その後、各行グループは、 SELECT リスト内の集計関数を使用して 1 つの行に折りたたまれます。最後に、 HAVING 句を使用してグループ化された行をフィルタリングできます。

sqlExprは、SELECT リストや HAVING 句ではなく、GROUP BY 句にあります。

緩和

エラーの軽減策は、原因によって異なります。

  • 正しい関数を指定しましたか?

    sqlExprを集計関数ではない適切な関数に置き換えてください。

  • 式を集約するつもりですか?

    GROUP BYから式を削除し、SELECTリストに追加します。

  • 集約された式でフィルタリングしますか?

    GROUP BY 句から式を削除し、BOOLEAN 演算子を使用して HAVING 句に追加します。

SQL
-- An aggregation in the GROUP BY clause
> SELECT a FROM VALUES(1, 2), (1, 3) AS T(a, b) GROUP BY a, sum(b);
[GROUP_BY_AGGREGATE] Aggregate functions are not allowed in GROUP BY, but found sum(T.b).; line 1 pos 58;

-- Move the expression to the SELECT list
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3) AS T(a, b) GROUP BY a;
1 5

-- An aggregation in the GROUP BY clause
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3), (2, 1) AS T(a, b) GROUP BY a, sum(b) > 1;
[GROUP_BY_AGGREGATE] Aggregate functions are not allowed in GROUP BY, but found (sum(T.b) > CAST(1 AS BIGINT)).; line 1 pos 74;

-- Move the expression to the HAVING clause
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3), (2, 1) AS T(a, b) GROUP BY a HAVING sum(b) > 1;
1 5

関連