GROUP_BY_AGGREGATE-Fehlerklasse
Aggregatfunktionen sind in GROUP BY nicht zulässig, es wurde aber <sqlExpr>
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 SELECT
-Liste auf eine einzelne Zeile reduziert.
Schließlich können Sie die gruppierten Zeilen dann mithilfe der HAVING
-Klausel filtern.
Der sqlExpr
befindet sich in der GROUP BY
-Klausel anstelle der SELECT
-Liste oder der HAVING
-Klausel.
Lösung
Die Minderung des Fehlers hängt von der Ursache ab:
Haben Sie die richtige Funktion angegeben?
Ersetzen Sie
sqlExpr
durch eine geeignete Funktion, die keine Aggregatfunktion ist.Planen Sie die Aggregation des Ausdrucks?
Entfernen Sie den Ausdruck aus der
GROUP BY
-Klausel, und fügen Sie ihn derSELECT
-Liste hinzu.Beabsichtigen Sie, nach dem aggregierten Ausdruck zu filtern?
Entfernen Sie den Ausdruck aus der
GROUP BY
-Klausel, und fügen Sie ihn mithilfe einesBOOLEAN
-Operators derHAVING
-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