Fehlerklasse GROUP_BY_AGGREGATE
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 derSELECT
-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 einesBOOLEAN
-Operators zurHAVING
-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