Teilen über


Fehlerklasse GROUP_BY_AGGREGATE

SQLSTATE: 42903

Aggregatfunktionen sind in GROUP BYnicht zulässig, aber in <sqlExpr>wurden sie gefunden.

Parameter

  • sqlExpr-: Ausdruck, der eine Aggregatfunktion enthält.

Erklärung

Der Zweck der GROUP BY-Klausel besteht darin, den Satz unterschiedlicher Gruppen zu identifizieren. Jede Gruppe von Zeilen wird dann mithilfe von Aggregatfunktionen in der liste SELECT in eine einzelne Zeile reduziert. Schließlich können Sie die gruppierten Zeilen mithilfe der HAVING-Klausel filtern.

Der sqlExpr befindet sich in der GROUP BY-Klausel anstelle der SELECT-Liste oder der HAVING-Klausel.

Milderung

Die Entschärfung des Fehlers hängt von der Ursache ab:

  • Haben Sie die richtige Funktion angegeben?

    Ersetzen Sie sqlExpr durch eine entsprechende Funktion, die keine Aggregatfunktion ist.

  • Möchten Sie den Ausdruck aggregieren?

    Entfernen Sie den Ausdruck aus der GROUP BY-Klausel, und fügen Sie ihn der SELECT-Liste hinzu.

  • Möchten Sie nach dem aggregierten Ausdruck filtern?

    Entfernen Sie den Ausdruck aus der GROUP BY-Klausel, und fügen Sie ihn mithilfe eines BOOLEAN-Operators zur HAVING-Klausel hinzu.

Beispiele

-- 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